[{"data":1,"prerenderedAt":2322},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fextension-authoring":864,"\u002Fguides\u002Fextension-authoring-surround":2317},[4,8,168,206,852,856,860],{"title":5,"path":6,"stem":7},"Quickstart","\u002Fquickstart","01.quickstart",{"title":9,"path":10,"stem":11,"children":12},"Concepts","\u002Fconcepts","20.concepts",[13,15,19,23,84,88,92,96,100],{"title":9,"path":10,"stem":14},"20.concepts\u002Findex",{"title":16,"path":17,"stem":18},"Preprocessing Graph","\u002Fconcepts\u002Fppg","20.concepts\u002F2.ppg",{"title":20,"path":21,"stem":22},"Plane decomposition","\u002Fconcepts\u002Fplanes","20.concepts\u002F3.planes",{"title":24,"path":25,"stem":26,"children":27},"Codecs","\u002Fconcepts\u002Fcodecs","20.concepts\u002F4.codecs",[28,32,36,40,44,48,52,56,60,64,68,72,76,80],{"title":29,"path":30,"stem":31},"Arithmetic","\u002Fconcepts\u002Fcodecs\u002Farithmetic","20.concepts\u002Fcodecs\u002Farithmetic",{"title":33,"path":34,"stem":35},"Context Mixing Lite","\u002Fconcepts\u002Fcodecs\u002Fcontext-mixing-lite","20.concepts\u002Fcodecs\u002Fcontext-mixing-lite",{"title":37,"path":38,"stem":39},"FPC","\u002Fconcepts\u002Fcodecs\u002Ffpc","20.concepts\u002Fcodecs\u002Ffpc",{"title":41,"path":42,"stem":43},"Huffman LLM 5-Bit","\u002Fconcepts\u002Fcodecs\u002Fhuff-llm","20.concepts\u002Fcodecs\u002Fhuff-llm",{"title":45,"path":46,"stem":47},"Huffman","\u002Fconcepts\u002Fcodecs\u002Fhuffman","20.concepts\u002Fcodecs\u002Fhuffman",{"title":49,"path":50,"stem":51},"Identity","\u002Fconcepts\u002Fcodecs\u002Fidentity","20.concepts\u002Fcodecs\u002Fidentity",{"title":53,"path":54,"stem":55},"Neural Predictor","\u002Fconcepts\u002Fcodecs\u002Fneural-predictor","20.concepts\u002Fcodecs\u002Fneural-predictor",{"title":57,"path":58,"stem":59},"Order-1 Arithmetic","\u002Fconcepts\u002Fcodecs\u002Forder1-arithmetic","20.concepts\u002Fcodecs\u002Forder1-arithmetic",{"title":61,"path":62,"stem":63},"Order-1 Scale AC","\u002Fconcepts\u002Fcodecs\u002Forder1-scale-ac","20.concepts\u002Fcodecs\u002Forder1-scale-ac",{"title":65,"path":66,"stem":67},"Per-Group Codebook","\u002Fconcepts\u002Fcodecs\u002Fper-group-codebook","20.concepts\u002Fcodecs\u002Fper-group-codebook",{"title":69,"path":70,"stem":71},"rANS","\u002Fconcepts\u002Fcodecs\u002Frans","20.concepts\u002Fcodecs\u002Frans",{"title":73,"path":74,"stem":75},"tANS","\u002Fconcepts\u002Fcodecs\u002Ftans","20.concepts\u002Fcodecs\u002Ftans",{"title":77,"path":78,"stem":79},"Zstd","\u002Fconcepts\u002Fcodecs\u002Fzstd","20.concepts\u002Fcodecs\u002Fzstd",{"title":81,"path":82,"stem":83},"Zstd Dictionary","\u002Fconcepts\u002Fcodecs\u002Fzstd-dict","20.concepts\u002Fcodecs\u002Fzstd-dict",{"title":85,"path":86,"stem":87},"Container format","\u002Fconcepts\u002Fcontainer","20.concepts\u002F5.container",{"title":89,"path":90,"stem":91},"Delta compression","\u002Fconcepts\u002Fdelta","20.concepts\u002F6.delta",{"title":93,"path":94,"stem":95},"Extensibility","\u002Fconcepts\u002Fextensibility","20.concepts\u002F7.extensibility",{"title":24,"path":25,"stem":97,"children":98},"20.concepts\u002Fcodecs\u002Findex",[99],{"title":24,"path":25,"stem":97},{"title":101,"path":102,"stem":103,"children":104},"Transforms","\u002Fconcepts\u002Ftransforms","20.concepts\u002Ftransforms\u002Findex",[105,106,110,114,118,122,126,130,134,140,144,148,152,156,160,164],{"title":101,"path":102,"stem":103},{"title":107,"path":108,"stem":109},"Alpha-Stable Normalize","\u002Fconcepts\u002Ftransforms\u002Falpha-stable-normalize","20.concepts\u002Ftransforms\u002Falpha-stable-normalize",{"title":111,"path":112,"stem":113},"Bit Reorder","\u002Fconcepts\u002Ftransforms\u002Fbit-reorder","20.concepts\u002Ftransforms\u002Fbit-reorder",{"title":115,"path":116,"stem":117},"Block Microscaling Repack","\u002Fconcepts\u002Ftransforms\u002Fblock-microscaling-repack","20.concepts\u002Ftransforms\u002Fblock-microscaling-repack",{"title":119,"path":120,"stem":121},"Burrows-Wheeler","\u002Fconcepts\u002Ftransforms\u002Fburrows-wheeler","20.concepts\u002Ftransforms\u002Fburrows-wheeler",{"title":123,"path":124,"stem":125},"Byte Split & Nibble Split","\u002Fconcepts\u002Ftransforms\u002Fbyte-split","20.concepts\u002Ftransforms\u002Fbyte-split",{"title":127,"path":128,"stem":129},"Concat","\u002Fconcepts\u002Ftransforms\u002Fconcat","20.concepts\u002Ftransforms\u002Fconcat",{"title":131,"path":132,"stem":133},"Delta","\u002Fconcepts\u002Ftransforms\u002Fdelta","20.concepts\u002Ftransforms\u002Fdelta",{"title":135,"path":136,"stem":137,"children":138},"Index Bitwidth Pack","\u002Fconcepts\u002Ftransforms\u002Findex-bitwidth-pack","20.concepts\u002Ftransforms\u002Findex-bitwidth-pack",[139],{"title":135,"path":136,"stem":137},{"title":141,"path":142,"stem":143},"IntDelta","\u002Fconcepts\u002Ftransforms\u002Fint-delta","20.concepts\u002Ftransforms\u002Fint-delta",{"title":145,"path":146,"stem":147},"Mantissa Zero Strip","\u002Fconcepts\u002Ftransforms\u002Fmantissa-zero-strip","20.concepts\u002Ftransforms\u002Fmantissa-zero-strip",{"title":149,"path":150,"stem":151},"Move to Front","\u002Fconcepts\u002Ftransforms\u002Fmove-to-front","20.concepts\u002Ftransforms\u002Fmove-to-front",{"title":153,"path":154,"stem":155},"MxFp4 Deinterleave","\u002Fconcepts\u002Ftransforms\u002Fmxfp4-deinterleave","20.concepts\u002Ftransforms\u002Fmxfp4-deinterleave",{"title":157,"path":158,"stem":159},"Predictor XOR","\u002Fconcepts\u002Ftransforms\u002Fpredictor-xor","20.concepts\u002Ftransforms\u002Fpredictor-xor",{"title":161,"path":162,"stem":163},"Reshape","\u002Fconcepts\u002Ftransforms\u002Freshape","20.concepts\u002Ftransforms\u002Freshape",{"title":165,"path":166,"stem":167},"Spherical Normalize","\u002Fconcepts\u002Ftransforms\u002Fspherical-normalize","20.concepts\u002Ftransforms\u002Fspherical-normalize",{"title":169,"path":170,"stem":171,"children":172},"Guides","\u002Fguides","30.guides\u002F00.index",[173,174,178,182,186,190,194,198,202],{"title":169,"path":170,"stem":171},{"title":175,"path":176,"stem":177},"CLI usage","\u002Fguides\u002Fcli","30.guides\u002F01.cli",{"title":179,"path":180,"stem":181},"Python API","\u002Fguides\u002Fpython-api","30.guides\u002F02.python-api",{"title":183,"path":184,"stem":185},"Writing your first extension","\u002Fguides\u002Fextension-authoring","30.guides\u002F03.extension-authoring",{"title":187,"path":188,"stem":189},"Trust and security","\u002Fguides\u002Ftrust-and-security","30.guides\u002F04.trust-and-security",{"title":191,"path":192,"stem":193},"Random access","\u002Fguides\u002Frandom-access","30.guides\u002F10.random-access",{"title":195,"path":196,"stem":197},"Tuning","\u002Fguides\u002Ftuning","30.guides\u002F11.tuning",{"title":199,"path":200,"stem":201},"Safetensors","\u002Fguides\u002Fsafetensors","30.guides\u002F50.safetensors",{"title":203,"path":204,"stem":205},"Transformers","\u002Fguides\u002Ftransformers","30.guides\u002F51.transformers",{"title":207,"path":208,"stem":209,"children":210},"API reference","\u002Fapi","40.api",[211,330],{"title":179,"path":212,"stem":213,"children":214},"\u002Fapi\u002Fpython","api\u002Fpython\u002Findex",[215,216],{"title":179,"path":212,"stem":213},{"title":217,"path":218,"stem":219,"children":220},"ptwm","\u002Fapi\u002Fpython\u002Fptwm","api\u002Fpython\u002Fptwm",[221,225,229,270,274,278,282,286,307,311,315,319,323,327],{"title":222,"path":223,"stem":224},"ablation","\u002Fapi\u002Fpython\u002Fptwm\u002Fablation","api\u002Fpython\u002Fptwm\u002Fablation",{"title":226,"path":227,"stem":228},"classify","\u002Fapi\u002Fpython\u002Fptwm\u002Fclassify","api\u002Fpython\u002Fptwm\u002Fclassify",{"title":230,"path":231,"stem":232,"children":233},"cli","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli","api\u002Fpython\u002Fptwm\u002Fcli",[234,238,242,246,250,254,258,262,266],{"title":235,"path":236,"stem":237},"bench","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fbench","api\u002Fpython\u002Fptwm\u002Fcli\u002Fbench",{"title":239,"path":240,"stem":241},"chains","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fchains","api\u002Fpython\u002Fptwm\u002Fcli\u002Fchains",{"title":243,"path":244,"stem":245},"compress","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fcompress","api\u002Fpython\u002Fptwm\u002Fcli\u002Fcompress",{"title":247,"path":248,"stem":249},"decompress","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fdecompress","api\u002Fpython\u002Fptwm\u002Fcli\u002Fdecompress",{"title":251,"path":252,"stem":253},"ext","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fext","api\u002Fpython\u002Fptwm\u002Fcli\u002Fext",{"title":255,"path":256,"stem":257},"main","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fmain","api\u002Fpython\u002Fptwm\u002Fcli\u002Fmain",{"title":259,"path":260,"stem":261},"policy","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Fpolicy","api\u002Fpython\u002Fptwm\u002Fcli\u002Fpolicy",{"title":263,"path":264,"stem":265},"trust","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Ftrust","api\u002Fpython\u002Fptwm\u002Fcli\u002Ftrust",{"title":267,"path":268,"stem":269},"utils","\u002Fapi\u002Fpython\u002Fptwm\u002Fcli\u002Futils","api\u002Fpython\u002Fptwm\u002Fcli\u002Futils",{"title":271,"path":272,"stem":273},"codecs","\u002Fapi\u002Fpython\u002Fptwm\u002Fcodecs","api\u002Fpython\u002Fptwm\u002Fcodecs",{"title":275,"path":276,"stem":277},"core","\u002Fapi\u002Fpython\u002Fptwm\u002Fcore","api\u002Fpython\u002Fptwm\u002Fcore",{"title":279,"path":280,"stem":281},"delta","\u002Fapi\u002Fpython\u002Fptwm\u002Fdelta","api\u002Fpython\u002Fptwm\u002Fdelta",{"title":283,"path":284,"stem":285},"entropy","\u002Fapi\u002Fpython\u002Fptwm\u002Fentropy","api\u002Fpython\u002Fptwm\u002Fentropy",{"title":287,"path":288,"stem":289,"children":290},"ext_tooling","\u002Fapi\u002Fpython\u002Fptwm\u002Fext_tooling","api\u002Fpython\u002Fptwm\u002Fext_tooling",[291,295,299,303],{"title":292,"path":293,"stem":294},"build","\u002Fapi\u002Fpython\u002Fptwm\u002Fext_tooling\u002Fbuild","api\u002Fpython\u002Fptwm\u002Fext_tooling\u002Fbuild",{"title":296,"path":297,"stem":298},"init","\u002Fapi\u002Fpython\u002Fptwm\u002Fext_tooling\u002Finit","api\u002Fpython\u002Fptwm\u002Fext_tooling\u002Finit",{"title":300,"path":301,"stem":302},"pack","\u002Fapi\u002Fpython\u002Fptwm\u002Fext_tooling\u002Fpack","api\u002Fpython\u002Fptwm\u002Fext_tooling\u002Fpack",{"title":304,"path":305,"stem":306},"sign","\u002Fapi\u002Fpython\u002Fptwm\u002Fext_tooling\u002Fsign","api\u002Fpython\u002Fptwm\u002Fext_tooling\u002Fsign",{"title":308,"path":309,"stem":310},"integrations","\u002Fapi\u002Fpython\u002Fptwm\u002Fintegrations","api\u002Fpython\u002Fptwm\u002Fintegrations",{"title":312,"path":313,"stem":314},"preprocessing","\u002Fapi\u002Fpython\u002Fptwm\u002Fpreprocessing","api\u002Fpython\u002Fptwm\u002Fpreprocessing",{"title":316,"path":317,"stem":318},"random_access","\u002Fapi\u002Fpython\u002Fptwm\u002Frandom_access","api\u002Fpython\u002Fptwm\u002Frandom_access",{"title":320,"path":321,"stem":322},"sharding","\u002Fapi\u002Fpython\u002Fptwm\u002Fsharding","api\u002Fpython\u002Fptwm\u002Fsharding",{"title":324,"path":325,"stem":326},"stores","\u002Fapi\u002Fpython\u002Fptwm\u002Fstores","api\u002Fpython\u002Fptwm\u002Fstores",{"title":267,"path":328,"stem":329},"\u002Fapi\u002Fpython\u002Fptwm\u002Futils","api\u002Fpython\u002Fptwm\u002Futils",{"title":331,"path":332,"stem":333,"children":334},"Rust API","\u002Fapi\u002Frust","api\u002Frust\u002Findex",[335,336],{"title":331,"path":332,"stem":333},{"title":337,"path":338,"stem":339,"children":340},"ptwm_core","\u002Fapi\u002Frust\u002Fptwm_core","api\u002Frust\u002Fptwm_core",[341,366,370,374,434,438,442,445,449,452,456,518,522,565,569,598,602,608,633,637,641,645,665,669,673,677,681,702,706,714,811,835],{"title":342,"path":343,"stem":344,"children":345},"chain","\u002Fapi\u002Frust\u002Fptwm_core\u002Fchain","api\u002Frust\u002Fptwm_core\u002Fchain",[346,350,354,358,362],{"title":347,"path":348,"stem":349},"dispatch","\u002Fapi\u002Frust\u002Fptwm_core\u002Fchain\u002Fdispatch","api\u002Frust\u002Fptwm_core\u002Fchain\u002Fdispatch",{"title":351,"path":352,"stem":353},"graph","\u002Fapi\u002Frust\u002Fptwm_core\u002Fchain\u002Fgraph","api\u002Frust\u002Fptwm_core\u002Fchain\u002Fgraph",{"title":355,"path":356,"stem":357},"runtime","\u002Fapi\u002Frust\u002Fptwm_core\u002Fchain\u002Fruntime","api\u002Frust\u002Fptwm_core\u002Fchain\u002Fruntime",{"title":359,"path":360,"stem":361},"validate","\u002Fapi\u002Frust\u002Fptwm_core\u002Fchain\u002Fvalidate","api\u002Frust\u002Fptwm_core\u002Fchain\u002Fvalidate",{"title":363,"path":364,"stem":365},"wire","\u002Fapi\u002Frust\u002Fptwm_core\u002Fchain\u002Fwire","api\u002Frust\u002Fptwm_core\u002Fchain\u002Fwire",{"title":367,"path":368,"stem":369},"codec","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodec","api\u002Frust\u002Fptwm_core\u002Fcodec",{"title":371,"path":372,"stem":373},"codec_tagged","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodec_tagged","api\u002Frust\u002Fptwm_core\u002Fcodec_tagged",{"title":271,"path":375,"stem":376,"children":377},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs","api\u002Frust\u002Fptwm_core\u002Fcodecs",[378,382,386,390,394,398,402,406,410,414,418,422,426,430],{"title":379,"path":380,"stem":381},"arithmetic","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Farithmetic","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Farithmetic",{"title":383,"path":384,"stem":385},"context_mixing","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fcontext_mixing","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fcontext_mixing",{"title":387,"path":388,"stem":389},"fpc","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Ffpc","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Ffpc",{"title":391,"path":392,"stem":393},"huff_llm","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fhuff_llm","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fhuff_llm",{"title":395,"path":396,"stem":397},"huffman","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fhuffman","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fhuffman",{"title":399,"path":400,"stem":401},"identity","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fidentity","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fidentity",{"title":403,"path":404,"stem":405},"neural_predictor","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fneural_predictor","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fneural_predictor",{"title":407,"path":408,"stem":409},"order1_arithmetic","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Forder1_arithmetic","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Forder1_arithmetic",{"title":411,"path":412,"stem":413},"order1_scale_ac","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Forder1_scale_ac","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Forder1_scale_ac",{"title":415,"path":416,"stem":417},"per_group_codebook","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fper_group_codebook","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fper_group_codebook",{"title":419,"path":420,"stem":421},"rans","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Frans","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Frans",{"title":423,"path":424,"stem":425},"tans","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Ftans","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Ftans",{"title":427,"path":428,"stem":429},"zstd","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fzstd","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fzstd",{"title":431,"path":432,"stem":433},"zstd_dict","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fzstd_dict","api\u002Frust\u002Fptwm_core\u002Fcodecs\u002Fzstd_dict",{"title":435,"path":436,"stem":437},"compressor","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcompressor","api\u002Frust\u002Fptwm_core\u002Fcompressor",{"title":439,"path":440,"stem":441},"container","\u002Fapi\u002Frust\u002Fptwm_core\u002Fcontainer","api\u002Frust\u002Fptwm_core\u002Fcontainer",{"title":279,"path":443,"stem":444},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fdelta","api\u002Frust\u002Fptwm_core\u002Fdelta",{"title":446,"path":447,"stem":448},"discovery","\u002Fapi\u002Frust\u002Fptwm_core\u002Fdiscovery","api\u002Frust\u002Fptwm_core\u002Fdiscovery",{"title":347,"path":450,"stem":451},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fdispatch","api\u002Frust\u002Fptwm_core\u002Fdispatch",{"title":453,"path":454,"stem":455},"dtype","\u002Fapi\u002Frust\u002Fptwm_core\u002Fdtype","api\u002Frust\u002Fptwm_core\u002Fdtype",{"title":283,"path":457,"stem":458,"children":459},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy","api\u002Frust\u002Fptwm_core\u002Fentropy",[460,468,487,490,493,504,508,511,515],{"title":379,"path":461,"stem":462,"children":463},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Farithmetic","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Farithmetic",[464],{"title":465,"path":466,"stem":467},"model","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Farithmetic\u002Fmodel","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Farithmetic\u002Fmodel",{"title":383,"path":469,"stem":470,"children":471},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing",[472,476,480,483],{"title":473,"path":474,"stem":475},"coder","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fcoder","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fcoder",{"title":477,"path":478,"stem":479},"mixer","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fmixer","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fmixer",{"title":465,"path":481,"stem":482},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fmodel","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fmodel",{"title":484,"path":485,"stem":486},"squash","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fsquash","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fcontext_mixing\u002Fsquash",{"title":391,"path":488,"stem":489},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fhuff_llm","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fhuff_llm",{"title":395,"path":491,"stem":492},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fhuffman","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fhuffman",{"title":403,"path":494,"stem":495,"children":496},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fneural_predictor","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fneural_predictor",[497,500],{"title":473,"path":498,"stem":499},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fneural_predictor\u002Fcoder","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fneural_predictor\u002Fcoder",{"title":501,"path":502,"stem":503},"net","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fneural_predictor\u002Fnet","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fneural_predictor\u002Fnet",{"title":505,"path":506,"stem":507},"outcome","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Foutcome","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Foutcome",{"title":419,"path":509,"stem":510},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Frans","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Frans",{"title":512,"path":513,"stem":514},"stream_frame","\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Fstream_frame","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Fstream_frame",{"title":423,"path":516,"stem":517},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fentropy\u002Ftans","api\u002Frust\u002Fptwm_core\u002Fentropy\u002Ftans",{"title":519,"path":520,"stem":521},"error","\u002Fapi\u002Frust\u002Fptwm_core\u002Ferror","api\u002Frust\u002Fptwm_core\u002Ferror",{"title":523,"path":524,"stem":525,"children":526},"extension","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension","api\u002Frust\u002Fptwm_core\u002Fextension",[527,531,535,539,542,545,549,553,557,561],{"title":528,"path":529,"stem":530},"builder","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fbuilder","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fbuilder",{"title":532,"path":533,"stem":534},"builtins","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fbuiltins","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fbuiltins",{"title":536,"path":537,"stem":538},"capability","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fcapability","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fcapability",{"title":347,"path":540,"stem":541},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fdispatch","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fdispatch",{"title":519,"path":543,"stem":544},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Ferror","api\u002Frust\u002Fptwm_core\u002Fextension\u002Ferror",{"title":546,"path":547,"stem":548},"id","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fid","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fid",{"title":550,"path":551,"stem":552},"kind","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fkind","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fkind",{"title":554,"path":555,"stem":556},"lifecycle","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Flifecycle","api\u002Frust\u002Fptwm_core\u002Fextension\u002Flifecycle",{"title":558,"path":559,"stem":560},"manifest","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Fmanifest","api\u002Frust\u002Fptwm_core\u002Fextension\u002Fmanifest",{"title":562,"path":563,"stem":564},"table","\u002Fapi\u002Frust\u002Fptwm_core\u002Fextension\u002Ftable","api\u002Frust\u002Fptwm_core\u002Fextension\u002Ftable",{"title":566,"path":567,"stem":568},"fit","\u002Fapi\u002Frust\u002Fptwm_core\u002Ffit","api\u002Frust\u002Fptwm_core\u002Ffit",{"title":570,"path":571,"stem":572,"children":573},"flavor","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor","api\u002Frust\u002Fptwm_core\u002Fflavor",[574,578,582,586,590,594],{"title":575,"path":576,"stem":577},"abi","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor\u002Fabi","api\u002Frust\u002Fptwm_core\u002Fflavor\u002Fabi",{"title":579,"path":580,"stem":581},"host","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor\u002Fhost","api\u002Frust\u002Fptwm_core\u002Fflavor\u002Fhost",{"title":583,"path":584,"stem":585},"native","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor\u002Fnative","api\u002Frust\u002Fptwm_core\u002Fflavor\u002Fnative",{"title":587,"path":588,"stem":589},"router","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor\u002Frouter","api\u002Frust\u002Fptwm_core\u002Fflavor\u002Frouter",{"title":591,"path":592,"stem":593},"third_party","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor\u002Fthird_party","api\u002Frust\u002Fptwm_core\u002Fflavor\u002Fthird_party",{"title":595,"path":596,"stem":597},"wasm","\u002Fapi\u002Frust\u002Fptwm_core\u002Fflavor\u002Fwasm","api\u002Frust\u002Fptwm_core\u002Fflavor\u002Fwasm",{"title":599,"path":600,"stem":601},"header","\u002Fapi\u002Frust\u002Fptwm_core\u002Fheader","api\u002Frust\u002Fptwm_core\u002Fheader",{"title":603,"path":604,"stem":605,"children":606},"index","\u002Fapi\u002Frust\u002Fptwm_core\u002Findex_module","api\u002Frust\u002Fptwm_core\u002Findex_module",[607],{"title":603,"path":604,"stem":605},{"title":609,"path":610,"stem":611,"children":612},"install","\u002Fapi\u002Frust\u002Fptwm_core\u002Finstall","api\u002Frust\u002Fptwm_core\u002Finstall",[613,617,621,625,629],{"title":614,"path":615,"stem":616},"git","\u002Fapi\u002Frust\u002Fptwm_core\u002Finstall\u002Fgit","api\u002Frust\u002Fptwm_core\u002Finstall\u002Fgit",{"title":618,"path":619,"stem":620},"https","\u002Fapi\u002Frust\u002Fptwm_core\u002Finstall\u002Fhttps","api\u002Frust\u002Fptwm_core\u002Finstall\u002Fhttps",{"title":622,"path":623,"stem":624},"local","\u002Fapi\u002Frust\u002Fptwm_core\u002Finstall\u002Flocal","api\u002Frust\u002Fptwm_core\u002Finstall\u002Flocal",{"title":626,"path":627,"stem":628},"oci","\u002Fapi\u002Frust\u002Fptwm_core\u002Finstall\u002Foci","api\u002Frust\u002Fptwm_core\u002Finstall\u002Foci",{"title":630,"path":631,"stem":632},"pip","\u002Fapi\u002Frust\u002Fptwm_core\u002Finstall\u002Fpip","api\u002Frust\u002Fptwm_core\u002Finstall\u002Fpip",{"title":634,"path":635,"stem":636},"layout","\u002Fapi\u002Frust\u002Fptwm_core\u002Flayout","api\u002Frust\u002Fptwm_core\u002Flayout",{"title":638,"path":639,"stem":640},"metadata","\u002Fapi\u002Frust\u002Fptwm_core\u002Fmetadata","api\u002Frust\u002Fptwm_core\u002Fmetadata",{"title":642,"path":643,"stem":644},"plane_record","\u002Fapi\u002Frust\u002Fptwm_core\u002Fplane_record","api\u002Frust\u002Fptwm_core\u002Fplane_record",{"title":259,"path":646,"stem":647,"children":648},"\u002Fapi\u002Frust\u002Fptwm_core\u002Fpolicy","api\u002Frust\u002Fptwm_core\u002Fpolicy",[649,653,657,661],{"title":650,"path":651,"stem":652},"capability_check","\u002Fapi\u002Frust\u002Fptwm_core\u002Fpolicy\u002Fcapability_check","api\u002Frust\u002Fptwm_core\u002Fpolicy\u002Fcapability_check",{"title":654,"path":655,"stem":656},"file","\u002Fapi\u002Frust\u002Fptwm_core\u002Fpolicy\u002Ffile","api\u002Frust\u002Fptwm_core\u002Fpolicy\u002Ffile",{"title":658,"path":659,"stem":660},"native_deps","\u002Fapi\u002Frust\u002Fptwm_core\u002Fpolicy\u002Fnative_deps","api\u002Frust\u002Fptwm_core\u002Fpolicy\u002Fnative_deps",{"title":662,"path":663,"stem":664},"resolve","\u002Fapi\u002Frust\u002Fptwm_core\u002Fpolicy\u002Fresolve","api\u002Frust\u002Fptwm_core\u002Fpolicy\u002Fresolve",{"title":666,"path":667,"stem":668},"prelude","\u002Fapi\u002Frust\u002Fptwm_core\u002Fprelude","api\u002Frust\u002Fptwm_core\u002Fprelude",{"title":670,"path":671,"stem":672},"quantize","\u002Fapi\u002Frust\u002Fptwm_core\u002Fquantize","api\u002Frust\u002Fptwm_core\u002Fquantize",{"title":674,"path":675,"stem":676},"range_coder","\u002Fapi\u002Frust\u002Fptwm_core\u002Frange_coder","api\u002Frust\u002Fptwm_core\u002Frange_coder",{"title":678,"path":679,"stem":680},"select","\u002Fapi\u002Frust\u002Fptwm_core\u002Fselect","api\u002Frust\u002Fptwm_core\u002Fselect",{"title":682,"path":683,"stem":684,"children":685},"split","\u002Fapi\u002Frust\u002Fptwm_core\u002Fsplit","api\u002Frust\u002Fptwm_core\u002Fsplit",[686,690,694,698],{"title":687,"path":688,"stem":689},"dtype16","\u002Fapi\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype16","api\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype16",{"title":691,"path":692,"stem":693},"dtype32","\u002Fapi\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype32","api\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype32",{"title":695,"path":696,"stem":697},"dtype64","\u002Fapi\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype64","api\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype64",{"title":699,"path":700,"stem":701},"dtype8","\u002Fapi\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype8","api\u002Frust\u002Fptwm_core\u002Fsplit\u002Fdtype8",{"title":703,"path":704,"stem":705},"tensor_record","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftensor_record","api\u002Frust\u002Fptwm_core\u002Ftensor_record",{"title":707,"path":708,"stem":709,"children":710},"transcode","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftranscode","api\u002Frust\u002Fptwm_core\u002Ftranscode",[711],{"title":558,"path":712,"stem":713},"\u002Fapi\u002Frust\u002Fptwm_core\u002Ftranscode\u002Fmanifest","api\u002Frust\u002Fptwm_core\u002Ftranscode\u002Fmanifest",{"title":715,"path":716,"stem":717,"children":718},"transforms","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms","api\u002Frust\u002Fptwm_core\u002Ftransforms",[719,723,727,731,735,739,743,747,751,754,757,761,767,771,775,779,783,787,791,795,799,803,807],{"title":720,"path":721,"stem":722},"alpha_stable_normalize","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Falpha_stable_normalize","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Falpha_stable_normalize",{"title":724,"path":725,"stem":726},"bit_reorder_fp8","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbit_reorder_fp8","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbit_reorder_fp8",{"title":728,"path":729,"stem":730},"bit_reorder_ieee","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbit_reorder_ieee","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbit_reorder_ieee",{"title":732,"path":733,"stem":734},"block_microscaling_repack","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fblock_microscaling_repack","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fblock_microscaling_repack",{"title":736,"path":737,"stem":738},"burrows_wheeler","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fburrows_wheeler","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fburrows_wheeler",{"title":740,"path":741,"stem":742},"byte_passthrough","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbyte_passthrough","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbyte_passthrough",{"title":744,"path":745,"stem":746},"byte_split","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbyte_split","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fbyte_split",{"title":748,"path":749,"stem":750},"concat","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fconcat","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fconcat",{"title":279,"path":752,"stem":753},"\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fdelta","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fdelta",{"title":283,"path":755,"stem":756},"\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fentropy","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fentropy",{"title":758,"path":759,"stem":760},"fusion","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Ffusion","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Ffusion",{"title":762,"path":763,"stem":764,"children":765},"index_pack","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Findex_pack","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Findex_pack",[766],{"title":762,"path":763,"stem":764},{"title":768,"path":769,"stem":770},"int_delta","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fint_delta","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fint_delta",{"title":772,"path":773,"stem":774},"mantissa_zero","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fmantissa_zero","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fmantissa_zero",{"title":776,"path":777,"stem":778},"move_to_front","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fmove_to_front","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fmove_to_front",{"title":780,"path":781,"stem":782},"mxfp4_deinterleave","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fmxfp4_deinterleave","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fmxfp4_deinterleave",{"title":784,"path":785,"stem":786},"nibble_split","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fnibble_split","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fnibble_split",{"title":788,"path":789,"stem":790},"op","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fop","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fop",{"title":792,"path":793,"stem":794},"predictor_xor","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fpredictor_xor","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fpredictor_xor",{"title":796,"path":797,"stem":798},"reshape","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Freshape","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Freshape",{"title":800,"path":801,"stem":802},"source","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fsource","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fsource",{"title":804,"path":805,"stem":806},"spherical_normalize","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fspherical_normalize","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fspherical_normalize",{"title":808,"path":809,"stem":810},"terminal","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fterminal","api\u002Frust\u002Fptwm_core\u002Ftransforms\u002Fterminal",{"title":263,"path":812,"stem":813,"children":814},"\u002Fapi\u002Frust\u002Fptwm_core\u002Ftrust","api\u002Frust\u002Fptwm_core\u002Ftrust",[815,819,823,827,831],{"title":816,"path":817,"stem":818},"bundled","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftrust\u002Fbundled","api\u002Frust\u002Fptwm_core\u002Ftrust\u002Fbundled",{"title":820,"path":821,"stem":822},"keyring","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftrust\u002Fkeyring","api\u002Frust\u002Fptwm_core\u002Ftrust\u002Fkeyring",{"title":824,"path":825,"stem":826},"org","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftrust\u002Forg","api\u002Frust\u002Fptwm_core\u002Ftrust\u002Forg",{"title":828,"path":829,"stem":830},"signature","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftrust\u002Fsignature","api\u002Frust\u002Fptwm_core\u002Ftrust\u002Fsignature",{"title":832,"path":833,"stem":834},"verifier","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftrust\u002Fverifier","api\u002Frust\u002Fptwm_core\u002Ftrust\u002Fverifier",{"title":836,"path":837,"stem":838,"children":839},"types","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftypes","api\u002Frust\u002Fptwm_core\u002Ftypes",[840,844,848],{"title":841,"path":842,"stem":843},"descriptor","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftypes\u002Fdescriptor","api\u002Frust\u002Fptwm_core\u002Ftypes\u002Fdescriptor",{"title":845,"path":846,"stem":847},"plane_role","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftypes\u002Fplane_role","api\u002Frust\u002Fptwm_core\u002Ftypes\u002Fplane_role",{"title":849,"path":850,"stem":851},"role","\u002Fapi\u002Frust\u002Fptwm_core\u002Ftypes\u002Frole","api\u002Frust\u002Fptwm_core\u002Ftypes\u002Frole",{"title":853,"path":854,"stem":855},"Benchmarks","\u002Fbenchmarks","50.benchmarks",{"title":857,"path":858,"stem":859},"Extensions","\u002Fextensions","60.extensions",{"title":861,"path":862,"stem":863},"Contributing","\u002Fcontributing","90.contributing",{"id":865,"title":183,"body":866,"description":2311,"extension":2312,"kind":2313,"language":2313,"links":2313,"meta":2314,"navigation":2313,"path":184,"seo":2315,"stem":185,"summary":2313,"__hash__":2316},"docs\u002F30.guides\u002F03.extension-authoring.md",{"type":867,"value":868,"toc":2300},"minimark",[869,873,881,927,932,978,981,989,1010,1027,1367,1379,1385,1388,1733,1747,1751,1765,1776,1782,1786,1805,1847,1850,1869,1878,1912,1915,1919,1931,2043,2054,2058,2074,2081,2088,2173,2203,2207,2235,2239,2296],[870,871,872],"p",{},"This guide walks through publishing a tiny plane codec end-to-end:\nscaffold the project, write the encode\u002Fdecode functions, sign the\nbundle, install it, and verify PTWM picks it up at runtime.",[870,874,875,876,880],{},"Total time: ~15 minutes. You'll need a Rust toolchain with the\n",[877,878,879],"code",{},"wasm32-wasip1"," target, plus the extension-author extras:",[882,883,888],"pre",{"className":884,"code":885,"language":886,"meta":887,"style":887},"language-sh shiki shiki-themes material-theme-lighter github-light github-dark","rustup target add wasm32-wasip1\npip install 'ptwm[ext-dev]'\n","sh","",[877,889,890,909],{"__ignoreMap":887},[891,892,895,899,903,906],"span",{"class":893,"line":894},"line",1,[891,896,898],{"class":897},"sbgvK","rustup",[891,900,902],{"class":901},"s_sjI"," target",[891,904,905],{"class":901}," add",[891,907,908],{"class":901}," wasm32-wasip1\n",[891,910,912,914,917,921,924],{"class":893,"line":911},2,[891,913,630],{"class":897},[891,915,916],{"class":901}," install",[891,918,920],{"class":919},"sjJ54"," '",[891,922,923],{"class":901},"ptwm[ext-dev]",[891,925,926],{"class":919},"'\n",[928,929,931],"h2",{"id":930},"_1-scaffold","1. Scaffold",[882,933,935],{"className":884,"code":934,"language":886,"meta":887,"style":887},"ptwm ext init xor-codec --lang rust --kind plane_codec\ncd xor-codec\nls\n",[877,936,937,963,972],{"__ignoreMap":887},[891,938,939,941,944,947,950,954,957,960],{"class":893,"line":894},[891,940,217],{"class":897},[891,942,943],{"class":901}," ext",[891,945,946],{"class":901}," init",[891,948,949],{"class":901}," xor-codec",[891,951,953],{"class":952},"stzsN"," --lang",[891,955,956],{"class":901}," rust",[891,958,959],{"class":952}," --kind",[891,961,962],{"class":901}," plane_codec\n",[891,964,965,969],{"class":893,"line":911},[891,966,968],{"class":967},"sptTA","cd",[891,970,971],{"class":901}," xor-codec\n",[891,973,975],{"class":893,"line":974},3,[891,976,977],{"class":897},"ls\n",[870,979,980],{},"You get:",[882,982,987],{"className":983,"code":985,"language":986},[984],"language-text","Cargo.toml          manifest.toml       src\u002Flib.rs\n","text",[877,988,985],{"__ignoreMap":887},[870,990,991,992,995,996,998,999,1002,1003,1006,1007,1009],{},"The Rust crate is configured as a ",[877,993,994],{},"cdylib"," targeting\n",[877,997,879],{},". ",[877,1000,1001],{},"manifest.toml"," declares one ",[877,1004,1005],{},"plane_codec","\ncontribution with a placeholder canonical id (rewritten at ",[877,1008,304],{},"\ntime).",[870,1011,1012,1015,1016,1023,1024,1026],{},[877,1013,1014],{},"src\u002Flib.rs"," exports the byte-buffer ABI symbols\n(see ",[1017,1018,1022],"a",{"href":1019,"rel":1020},"https:\u002F\u002Fgithub.com\u002Fkhwstolle\u002Fptwm\u002Fblob\u002Fmaster\u002Fdocs\u002Farchitecture\u002Fextension-system.md",[1021],"nofollow","the extension system doc"," for the full ",[877,1025,1005],{}," signature):",[882,1028,1032],{"className":1029,"code":1030,"language":1031,"meta":887,"style":887},"language-rust shiki shiki-themes material-theme-lighter github-light github-dark","#[unsafe(no_mangle)]\npub extern \"C\" fn ptwm_plane_codec_v1_init() -> u32 { 0 }\n\n#[unsafe(no_mangle)]\npub extern \"C\" fn ptwm_plane_codec_v1_cleanup(_state: u32) {}\n\n#[unsafe(no_mangle)]\npub extern \"C\" fn ptwm_plane_codec_v1_encode(\n    _state: u32,\n    in_ptr: u32, in_len: u32,\n    out_ptr: u32, out_len: u32,\n) -> i64 { \u002F* copy input → output *\u002F }\n\n#[unsafe(no_mangle)]\npub extern \"C\" fn ptwm_plane_codec_v1_decode(\n    _state: u32,\n    in_ptr: u32, in_len: u32,\n    out_ptr: u32, out_len: u32,\n) -> i64 { \u002F* copy input → output *\u002F }\n","rust",[877,1033,1034,1054,1099,1105,1118,1152,1157,1170,1191,1204,1226,1247,1265,1270,1283,1303,1314,1333,1352],{"__ignoreMap":887},[891,1035,1036,1040,1044,1047,1051],{"class":893,"line":894},[891,1037,1039],{"class":1038},"sP7_E","#[",[891,1041,1043],{"class":1042},"sw1J6","unsafe",[891,1045,1046],{"class":1038},"(",[891,1048,1050],{"class":1049},"su5hD","no_mangle",[891,1052,1053],{"class":1038},")]\n",[891,1055,1056,1059,1063,1066,1069,1072,1075,1079,1082,1086,1089,1092,1096],{"class":893,"line":911},[891,1057,1058],{"class":1042},"pub",[891,1060,1062],{"class":1061},"sbsja"," extern",[891,1064,1065],{"class":919}," \"",[891,1067,1068],{"class":901},"C",[891,1070,1071],{"class":919},"\"",[891,1073,1074],{"class":1042}," fn",[891,1076,1078],{"class":1077},"sGLFI"," ptwm_plane_codec_v1_init",[891,1080,1081],{"class":1038},"()",[891,1083,1085],{"class":1084},"smGrS"," ->",[891,1087,1088],{"class":897}," u32",[891,1090,1091],{"class":1038}," {",[891,1093,1095],{"class":1094},"srdBf"," 0",[891,1097,1098],{"class":1038}," }\n",[891,1100,1101],{"class":893,"line":974},[891,1102,1104],{"emptyLinePlaceholder":1103},true,"\n",[891,1106,1108,1110,1112,1114,1116],{"class":893,"line":1107},4,[891,1109,1039],{"class":1038},[891,1111,1043],{"class":1042},[891,1113,1046],{"class":1038},[891,1115,1050],{"class":1049},[891,1117,1053],{"class":1038},[891,1119,1121,1123,1125,1127,1129,1131,1133,1136,1138,1141,1144,1146,1149],{"class":893,"line":1120},5,[891,1122,1058],{"class":1042},[891,1124,1062],{"class":1061},[891,1126,1065],{"class":919},[891,1128,1068],{"class":901},[891,1130,1071],{"class":919},[891,1132,1074],{"class":1042},[891,1134,1135],{"class":1077}," ptwm_plane_codec_v1_cleanup",[891,1137,1046],{"class":1038},[891,1139,1140],{"class":1049},"_state",[891,1142,1143],{"class":1084},":",[891,1145,1088],{"class":897},[891,1147,1148],{"class":1038},")",[891,1150,1151],{"class":1038}," {}\n",[891,1153,1155],{"class":893,"line":1154},6,[891,1156,1104],{"emptyLinePlaceholder":1103},[891,1158,1160,1162,1164,1166,1168],{"class":893,"line":1159},7,[891,1161,1039],{"class":1038},[891,1163,1043],{"class":1042},[891,1165,1046],{"class":1038},[891,1167,1050],{"class":1049},[891,1169,1053],{"class":1038},[891,1171,1173,1175,1177,1179,1181,1183,1185,1188],{"class":893,"line":1172},8,[891,1174,1058],{"class":1042},[891,1176,1062],{"class":1061},[891,1178,1065],{"class":919},[891,1180,1068],{"class":901},[891,1182,1071],{"class":919},[891,1184,1074],{"class":1042},[891,1186,1187],{"class":1077}," ptwm_plane_codec_v1_encode",[891,1189,1190],{"class":1038},"(\n",[891,1192,1194,1197,1199,1201],{"class":893,"line":1193},9,[891,1195,1196],{"class":1049},"    _state",[891,1198,1143],{"class":1084},[891,1200,1088],{"class":897},[891,1202,1203],{"class":1038},",\n",[891,1205,1207,1210,1212,1214,1217,1220,1222,1224],{"class":893,"line":1206},10,[891,1208,1209],{"class":1049},"    in_ptr",[891,1211,1143],{"class":1084},[891,1213,1088],{"class":897},[891,1215,1216],{"class":1038},",",[891,1218,1219],{"class":1049}," in_len",[891,1221,1143],{"class":1084},[891,1223,1088],{"class":897},[891,1225,1203],{"class":1038},[891,1227,1229,1232,1234,1236,1238,1241,1243,1245],{"class":893,"line":1228},11,[891,1230,1231],{"class":1049},"    out_ptr",[891,1233,1143],{"class":1084},[891,1235,1088],{"class":897},[891,1237,1216],{"class":1038},[891,1239,1240],{"class":1049}," out_len",[891,1242,1143],{"class":1084},[891,1244,1088],{"class":897},[891,1246,1203],{"class":1038},[891,1248,1250,1252,1254,1257,1259,1263],{"class":893,"line":1249},12,[891,1251,1148],{"class":1038},[891,1253,1085],{"class":1084},[891,1255,1256],{"class":897}," i64",[891,1258,1091],{"class":1038},[891,1260,1262],{"class":1261},"sutJx"," \u002F* copy input → output *\u002F",[891,1264,1098],{"class":1038},[891,1266,1268],{"class":893,"line":1267},13,[891,1269,1104],{"emptyLinePlaceholder":1103},[891,1271,1273,1275,1277,1279,1281],{"class":893,"line":1272},14,[891,1274,1039],{"class":1038},[891,1276,1043],{"class":1042},[891,1278,1046],{"class":1038},[891,1280,1050],{"class":1049},[891,1282,1053],{"class":1038},[891,1284,1286,1288,1290,1292,1294,1296,1298,1301],{"class":893,"line":1285},15,[891,1287,1058],{"class":1042},[891,1289,1062],{"class":1061},[891,1291,1065],{"class":919},[891,1293,1068],{"class":901},[891,1295,1071],{"class":919},[891,1297,1074],{"class":1042},[891,1299,1300],{"class":1077}," ptwm_plane_codec_v1_decode",[891,1302,1190],{"class":1038},[891,1304,1306,1308,1310,1312],{"class":893,"line":1305},16,[891,1307,1196],{"class":1049},[891,1309,1143],{"class":1084},[891,1311,1088],{"class":897},[891,1313,1203],{"class":1038},[891,1315,1317,1319,1321,1323,1325,1327,1329,1331],{"class":893,"line":1316},17,[891,1318,1209],{"class":1049},[891,1320,1143],{"class":1084},[891,1322,1088],{"class":897},[891,1324,1216],{"class":1038},[891,1326,1219],{"class":1049},[891,1328,1143],{"class":1084},[891,1330,1088],{"class":897},[891,1332,1203],{"class":1038},[891,1334,1336,1338,1340,1342,1344,1346,1348,1350],{"class":893,"line":1335},18,[891,1337,1231],{"class":1049},[891,1339,1143],{"class":1084},[891,1341,1088],{"class":897},[891,1343,1216],{"class":1038},[891,1345,1240],{"class":1049},[891,1347,1143],{"class":1084},[891,1349,1088],{"class":897},[891,1351,1203],{"class":1038},[891,1353,1355,1357,1359,1361,1363,1365],{"class":893,"line":1354},19,[891,1356,1148],{"class":1038},[891,1358,1085],{"class":1084},[891,1360,1256],{"class":897},[891,1362,1091],{"class":1038},[891,1364,1262],{"class":1261},[891,1366,1098],{"class":1038},[870,1368,1369,1370,1374,1375,1378],{},"The generated stub is a ",[1371,1372,1373],"em",{},"passthrough"," — input bytes flow out unchanged.\nA real codec replaces the bodies with entropy coding; for the tutorial\nwe'll XOR every byte with ",[877,1376,1377],{},"0x5A",".",[928,1380,1382,1383],{"id":1381},"_2-edit-srclibrs","2. Edit ",[877,1384,1014],{},[870,1386,1387],{},"Replace the encode and decode bodies:",[882,1389,1391],{"className":1029,"code":1390,"language":1031,"meta":887,"style":887},"const KEY: u8 = 0x5A;\n\n#[unsafe(no_mangle)]\npub extern \"C\" fn ptwm_plane_codec_v1_encode(\n    _state: u32,\n    in_ptr: u32, in_len: u32,\n    out_ptr: u32, out_len: u32,\n) -> i64 {\n    if out_len \u003C in_len { return -2; }\n    let input = unsafe { std::slice::from_raw_parts(in_ptr as *const u8, in_len as usize) };\n    let output = unsafe { std::slice::from_raw_parts_mut(out_ptr as *mut u8, out_len as usize) };\n    for (i, b) in input.iter().enumerate() {\n        output[i] = b ^ KEY;\n    }\n    in_len as i64\n}\n",[877,1392,1393,1416,1420,1432,1450,1460,1478,1496,1507,1539,1598,1648,1688,1713,1718,1728],{"__ignoreMap":887},[891,1394,1395,1398,1402,1404,1407,1410,1413],{"class":893,"line":894},[891,1396,1397],{"class":1061},"const",[891,1399,1401],{"class":1400},"s_hVV"," KEY",[891,1403,1143],{"class":1084},[891,1405,1406],{"class":897}," u8",[891,1408,1409],{"class":1084}," =",[891,1411,1412],{"class":1094}," 0x5A",[891,1414,1415],{"class":1038},";\n",[891,1417,1418],{"class":893,"line":911},[891,1419,1104],{"emptyLinePlaceholder":1103},[891,1421,1422,1424,1426,1428,1430],{"class":893,"line":974},[891,1423,1039],{"class":1038},[891,1425,1043],{"class":1042},[891,1427,1046],{"class":1038},[891,1429,1050],{"class":1049},[891,1431,1053],{"class":1038},[891,1433,1434,1436,1438,1440,1442,1444,1446,1448],{"class":893,"line":1107},[891,1435,1058],{"class":1042},[891,1437,1062],{"class":1061},[891,1439,1065],{"class":919},[891,1441,1068],{"class":901},[891,1443,1071],{"class":919},[891,1445,1074],{"class":1042},[891,1447,1187],{"class":1077},[891,1449,1190],{"class":1038},[891,1451,1452,1454,1456,1458],{"class":893,"line":1120},[891,1453,1196],{"class":1049},[891,1455,1143],{"class":1084},[891,1457,1088],{"class":897},[891,1459,1203],{"class":1038},[891,1461,1462,1464,1466,1468,1470,1472,1474,1476],{"class":893,"line":1154},[891,1463,1209],{"class":1049},[891,1465,1143],{"class":1084},[891,1467,1088],{"class":897},[891,1469,1216],{"class":1038},[891,1471,1219],{"class":1049},[891,1473,1143],{"class":1084},[891,1475,1088],{"class":897},[891,1477,1203],{"class":1038},[891,1479,1480,1482,1484,1486,1488,1490,1492,1494],{"class":893,"line":1159},[891,1481,1231],{"class":1049},[891,1483,1143],{"class":1084},[891,1485,1088],{"class":897},[891,1487,1216],{"class":1038},[891,1489,1240],{"class":1049},[891,1491,1143],{"class":1084},[891,1493,1088],{"class":897},[891,1495,1203],{"class":1038},[891,1497,1498,1500,1502,1504],{"class":893,"line":1172},[891,1499,1148],{"class":1038},[891,1501,1085],{"class":1084},[891,1503,1256],{"class":897},[891,1505,1506],{"class":1038}," {\n",[891,1508,1509,1513,1516,1519,1522,1525,1528,1531,1534,1537],{"class":893,"line":1193},[891,1510,1512],{"class":1511},"sVHd0","    if",[891,1514,1515],{"class":1049}," out_len ",[891,1517,1518],{"class":1084},"\u003C",[891,1520,1521],{"class":1049}," in_len ",[891,1523,1524],{"class":1038},"{",[891,1526,1527],{"class":1511}," return",[891,1529,1530],{"class":1084}," -",[891,1532,1533],{"class":1094},"2",[891,1535,1536],{"class":1038},";",[891,1538,1098],{"class":1038},[891,1540,1541,1544,1547,1550,1553,1555,1558,1561,1564,1566,1569,1571,1574,1577,1580,1582,1584,1586,1588,1590,1593,1595],{"class":893,"line":1206},[891,1542,1543],{"class":1061},"    let",[891,1545,1546],{"class":1049}," input ",[891,1548,1549],{"class":1084},"=",[891,1551,1552],{"class":1042}," unsafe",[891,1554,1091],{"class":1038},[891,1556,1557],{"class":897}," std",[891,1559,1560],{"class":1084},"::",[891,1562,1563],{"class":897},"slice",[891,1565,1560],{"class":1084},[891,1567,1568],{"class":1077},"from_raw_parts",[891,1570,1046],{"class":1038},[891,1572,1573],{"class":1049},"in_ptr ",[891,1575,1576],{"class":1042},"as",[891,1578,1579],{"class":1084}," *",[891,1581,1397],{"class":1061},[891,1583,1406],{"class":897},[891,1585,1216],{"class":1038},[891,1587,1521],{"class":1049},[891,1589,1576],{"class":1042},[891,1591,1592],{"class":897}," usize",[891,1594,1148],{"class":1038},[891,1596,1597],{"class":1038}," };\n",[891,1599,1600,1602,1605,1607,1609,1611,1613,1615,1617,1619,1622,1624,1627,1629,1631,1634,1636,1638,1640,1642,1644,1646],{"class":893,"line":1228},[891,1601,1543],{"class":1061},[891,1603,1604],{"class":1049}," output ",[891,1606,1549],{"class":1084},[891,1608,1552],{"class":1042},[891,1610,1091],{"class":1038},[891,1612,1557],{"class":897},[891,1614,1560],{"class":1084},[891,1616,1563],{"class":897},[891,1618,1560],{"class":1084},[891,1620,1621],{"class":1077},"from_raw_parts_mut",[891,1623,1046],{"class":1038},[891,1625,1626],{"class":1049},"out_ptr ",[891,1628,1576],{"class":1042},[891,1630,1579],{"class":1084},[891,1632,1633],{"class":1061},"mut",[891,1635,1406],{"class":897},[891,1637,1216],{"class":1038},[891,1639,1515],{"class":1049},[891,1641,1576],{"class":1042},[891,1643,1592],{"class":897},[891,1645,1148],{"class":1038},[891,1647,1597],{"class":1038},[891,1649,1650,1653,1656,1659,1661,1664,1666,1669,1672,1674,1677,1679,1681,1684,1686],{"class":893,"line":1249},[891,1651,1652],{"class":1511},"    for",[891,1654,1655],{"class":1038}," (",[891,1657,1658],{"class":1049},"i",[891,1660,1216],{"class":1038},[891,1662,1663],{"class":1049}," b",[891,1665,1148],{"class":1038},[891,1667,1668],{"class":1042}," in",[891,1670,1671],{"class":1049}," input",[891,1673,1378],{"class":1084},[891,1675,1676],{"class":1077},"iter",[891,1678,1081],{"class":1038},[891,1680,1378],{"class":1084},[891,1682,1683],{"class":1077},"enumerate",[891,1685,1081],{"class":1038},[891,1687,1506],{"class":1038},[891,1689,1690,1693,1696,1698,1701,1703,1706,1709,1711],{"class":893,"line":1267},[891,1691,1692],{"class":1049},"        output",[891,1694,1695],{"class":1038},"[",[891,1697,1658],{"class":1049},[891,1699,1700],{"class":1038},"]",[891,1702,1409],{"class":1084},[891,1704,1705],{"class":1049}," b ",[891,1707,1708],{"class":1084},"^",[891,1710,1401],{"class":1400},[891,1712,1415],{"class":1038},[891,1714,1715],{"class":893,"line":1272},[891,1716,1717],{"class":1038},"    }\n",[891,1719,1720,1723,1725],{"class":893,"line":1285},[891,1721,1722],{"class":1049},"    in_len ",[891,1724,1576],{"class":1042},[891,1726,1727],{"class":897}," i64\n",[891,1729,1730],{"class":893,"line":1305},[891,1731,1732],{"class":1038},"}\n",[870,1734,1735,1736,1738,1739,1742,1743,1746],{},"Decode is identical (XOR is self-inverse). Keep ",[877,1737,296],{}," returning ",[877,1740,1741],{},"0","\nand ",[877,1744,1745],{},"cleanup"," empty — this codec has no per-call state.",[928,1748,1750],{"id":1749},"_3-build","3. Build",[882,1752,1754],{"className":884,"code":1753,"language":886,"meta":887,"style":887},"ptwm ext build\n",[877,1755,1756],{"__ignoreMap":887},[891,1757,1758,1760,1762],{"class":893,"line":894},[891,1759,217],{"class":897},[891,1761,943],{"class":901},[891,1763,1764],{"class":901}," build\n",[870,1766,1767,1768,1771,1772,1775],{},"Behind the scenes this runs ",[877,1769,1770],{},"cargo build --target wasm32-wasip1 --release"," and copies the resulting ",[877,1773,1774],{},".wasm"," to the bundle root. The\noutput:",[882,1777,1780],{"className":1778,"code":1779,"language":986},[984],"target\u002Fwasm32-wasip1\u002Frelease\u002Fxor_codec.wasm    [intermediate]\nxor-codec.wasm                                  [bundle artifact]\n",[877,1781,1779],{"__ignoreMap":887},[928,1783,1785],{"id":1784},"_4-sign","4. Sign",[870,1787,1788,1791,1792,1796,1797,1800,1801,1804],{},[877,1789,1790],{},"ptwm ext sign --key \u003Cpath>"," takes a ",[1793,1794,1795],"strong",{},"32-byte raw Ed25519 seed file",".\nThe v1 CLI doesn't ship a ",[877,1798,1799],{},"gen-key"," helper, so generate one with\n",[877,1802,1803],{},"openssl"," (or any source of 32 random bytes):",[882,1806,1808],{"className":884,"code":1807,"language":886,"meta":887,"style":887},"mkdir -p ~\u002F.ptwm\u002Fkeys\nopenssl rand 32 > ~\u002F.ptwm\u002Fkeys\u002Fdev.priv\nchmod 600 ~\u002F.ptwm\u002Fkeys\u002Fdev.priv\n",[877,1809,1810,1821,1837],{"__ignoreMap":887},[891,1811,1812,1815,1818],{"class":893,"line":894},[891,1813,1814],{"class":897},"mkdir",[891,1816,1817],{"class":952}," -p",[891,1819,1820],{"class":901}," ~\u002F.ptwm\u002Fkeys\n",[891,1822,1823,1825,1828,1831,1834],{"class":893,"line":911},[891,1824,1803],{"class":897},[891,1826,1827],{"class":901}," rand",[891,1829,1830],{"class":1094}," 32",[891,1832,1833],{"class":1084}," >",[891,1835,1836],{"class":901}," ~\u002F.ptwm\u002Fkeys\u002Fdev.priv\n",[891,1838,1839,1842,1845],{"class":893,"line":974},[891,1840,1841],{"class":897},"chmod",[891,1843,1844],{"class":1094}," 600",[891,1846,1836],{"class":901},[870,1848,1849],{},"Then sign the bundle:",[882,1851,1853],{"className":884,"code":1852,"language":886,"meta":887,"style":887},"ptwm ext sign --key ~\u002F.ptwm\u002Fkeys\u002Fdev.priv\n",[877,1854,1855],{"__ignoreMap":887},[891,1856,1857,1859,1861,1864,1867],{"class":893,"line":894},[891,1858,217],{"class":897},[891,1860,943],{"class":901},[891,1862,1863],{"class":901}," sign",[891,1865,1866],{"class":952}," --key",[891,1868,1836],{"class":901},[870,1870,1871,1874,1875,1877],{},[877,1872,1873],{},"ext sign"," rewrites ",[877,1876,1001],{}," so that:",[1879,1880,1881,1892,1903],"ul",{},[1882,1883,1884,1887,1888,1891],"li",{},[877,1885,1886],{},"[bundle].author_pubkey"," becomes the real ",[877,1889,1890],{},"ed25519:\u003Chex>"," of the key.",[1882,1893,1894,1895,1898,1899,1902],{},"Every ",[877,1896,1897],{},"[[contributions]].id"," becomes the real\n",[877,1900,1901],{},"blake3:\u003Chex>"," canonical id (derived from your pubkey + name +\nversion).",[1882,1904,1905,1908,1909,1378],{},[877,1906,1907],{},"signature.bin"," is written next to the manifest: a 64-byte Ed25519\nsignature over ",[877,1910,1911],{},"blake3(manifest_bytes ‖ xor-codec.wasm)",[870,1913,1914],{},"Tampering with either the manifest or the binary after this step\ninvalidates the signature; the container reader will reject the\nbundle.",[928,1916,1918],{"id":1917},"_5-pack-install","5. Pack & install",[870,1920,1921,1922,1924,1925,1927,1928,1930],{},"After signing, ",[877,1923,1001],{}," carries your ",[877,1926,1890],{}," public key\nunder ",[877,1929,1886],{},". Read it out and add it to your\nkeyring before installing:",[882,1932,1934],{"className":884,"code":1933,"language":886,"meta":887,"style":887},"ptwm ext pack       # produces xor-codec-0.1.0.tar.zst\n\n# Pull the public key from the signed manifest and trust it locally.\nPUBKEY=$(python -c \\\n    'import tomllib, pathlib; \\\n     print(tomllib.loads(pathlib.Path(\"manifest.toml\").read_text())[\"bundle\"][\"author_pubkey\"])')\nptwm trust add --key \"$PUBKEY\" --label dev\n\nptwm ext install .\u002Fxor-codec-0.1.0.tar.zst\nptwm ext list\n",[877,1935,1936,1948,1952,1957,1976,1984,1995,2019,2023,2034],{"__ignoreMap":887},[891,1937,1938,1940,1942,1945],{"class":893,"line":894},[891,1939,217],{"class":897},[891,1941,943],{"class":901},[891,1943,1944],{"class":901}," pack",[891,1946,1947],{"class":1261},"       # produces xor-codec-0.1.0.tar.zst\n",[891,1949,1950],{"class":893,"line":911},[891,1951,1104],{"emptyLinePlaceholder":1103},[891,1953,1954],{"class":893,"line":974},[891,1955,1956],{"class":1261},"# Pull the public key from the signed manifest and trust it locally.\n",[891,1958,1959,1962,1964,1967,1970,1973],{"class":893,"line":1107},[891,1960,1961],{"class":1049},"PUBKEY",[891,1963,1549],{"class":1084},[891,1965,1966],{"class":1038},"$(",[891,1968,1969],{"class":897},"python",[891,1971,1972],{"class":952}," -c",[891,1974,1975],{"class":1400}," \\\n",[891,1977,1978,1981],{"class":893,"line":1120},[891,1979,1980],{"class":919},"    '",[891,1982,1983],{"class":901},"import tomllib, pathlib; \\\n",[891,1985,1986,1989,1992],{"class":893,"line":1154},[891,1987,1988],{"class":901},"     print(tomllib.loads(pathlib.Path(\"manifest.toml\").read_text())[\"bundle\"][\"author_pubkey\"])",[891,1990,1991],{"class":919},"'",[891,1993,1994],{"class":1038},")\n",[891,1996,1997,1999,2002,2004,2006,2008,2011,2013,2016],{"class":893,"line":1159},[891,1998,217],{"class":897},[891,2000,2001],{"class":901}," trust",[891,2003,905],{"class":901},[891,2005,1866],{"class":952},[891,2007,1065],{"class":919},[891,2009,2010],{"class":1049},"$PUBKEY",[891,2012,1071],{"class":919},[891,2014,2015],{"class":952}," --label",[891,2017,2018],{"class":901}," dev\n",[891,2020,2021],{"class":893,"line":1172},[891,2022,1104],{"emptyLinePlaceholder":1103},[891,2024,2025,2027,2029,2031],{"class":893,"line":1193},[891,2026,217],{"class":897},[891,2028,943],{"class":901},[891,2030,916],{"class":901},[891,2032,2033],{"class":901}," .\u002Fxor-codec-0.1.0.tar.zst\n",[891,2035,2036,2038,2040],{"class":893,"line":1206},[891,2037,217],{"class":897},[891,2039,943],{"class":901},[891,2041,2042],{"class":901}," list\n",[870,2044,2045,2046,2049,2050,2053],{},"The ",[877,2047,2048],{},"trust add --key"," step tells the user keyring to accept any\ncontribution signed by this author. Without it, ",[877,2051,2052],{},"ext install"," would\nrefuse the bundle as untrusted.",[928,2055,2057],{"id":2056},"_6-confirm-it-loads","6. Confirm it loads",[882,2059,2061],{"className":884,"code":2060,"language":886,"meta":887,"style":887},"ptwm ext show xor-codec\n",[877,2062,2063],{"__ignoreMap":887},[891,2064,2065,2067,2069,2072],{"class":893,"line":894},[891,2066,217],{"class":897},[891,2068,943],{"class":901},[891,2070,2071],{"class":901}," show",[891,2073,971],{"class":901},[870,2075,2076,2077,2080],{},"Look for ",[877,2078,2079],{},"pubkey: ed25519:\u003Cyour-hex>"," — that's the keyring matching\nthe bundle's author. The contribution count, canonical id, and\ninstalled flavors are also reported.",[870,2082,2083,2084,2087],{},"To exercise the new codec end-to-end, run the ablation harness so a\npolicy variant can target it. Write a policy that allows just your\nnew codec, then run ",[877,2085,2086],{},"ptwm bench compress"," so the dispatcher attempts\nit against the built-ins:",[882,2089,2091],{"className":884,"code":2090,"language":886,"meta":887,"style":887},"python -c 'print(\"Hello, \" * 50, end=\"\")' > sample.bin\n\ncat > policy.toml \u003C\u003CEOF\n[allow]\nextra = [\"blake3:\u003Ccanonical-id-from-show>\"]\nEOF\n\nptwm bench compress sample.bin --variant policy.toml --out bench-out\u002F\n",[877,2092,2093,2111,2115,2131,2136,2141,2145,2149],{"__ignoreMap":887},[891,2094,2095,2097,2099,2101,2104,2106,2108],{"class":893,"line":894},[891,2096,1969],{"class":897},[891,2098,1972],{"class":952},[891,2100,920],{"class":919},[891,2102,2103],{"class":901},"print(\"Hello, \" * 50, end=\"\")",[891,2105,1991],{"class":919},[891,2107,1833],{"class":1084},[891,2109,2110],{"class":901}," sample.bin\n",[891,2112,2113],{"class":893,"line":911},[891,2114,1104],{"emptyLinePlaceholder":1103},[891,2116,2117,2120,2122,2125,2128],{"class":893,"line":974},[891,2118,2119],{"class":897},"cat",[891,2121,1833],{"class":1084},[891,2123,2124],{"class":901}," policy.toml",[891,2126,2127],{"class":1084}," \u003C\u003C",[891,2129,2130],{"class":919},"EOF\n",[891,2132,2133],{"class":893,"line":1107},[891,2134,2135],{"class":901},"[allow]\n",[891,2137,2138],{"class":893,"line":1120},[891,2139,2140],{"class":901},"extra = [\"blake3:\u003Ccanonical-id-from-show>\"]\n",[891,2142,2143],{"class":893,"line":1154},[891,2144,2130],{"class":919},[891,2146,2147],{"class":893,"line":1159},[891,2148,1104],{"emptyLinePlaceholder":1103},[891,2150,2151,2153,2156,2159,2162,2165,2167,2170],{"class":893,"line":1172},[891,2152,217],{"class":897},[891,2154,2155],{"class":901}," bench",[891,2157,2158],{"class":901}," compress",[891,2160,2161],{"class":901}," sample.bin",[891,2163,2164],{"class":952}," --variant",[891,2166,2124],{"class":901},[891,2168,2169],{"class":952}," --out",[891,2171,2172],{"class":901}," bench-out\u002F\n",[870,2174,2175,2178,2179,2182,2183,2186,2187,2190,2191,2194,2195,2198,2199,2202],{},[877,2176,2177],{},"bench compress"," writes a CSV under ",[877,2180,2181],{},"bench-out\u002F",". The\n",[877,2184,2185],{},"resolved_policy_toml"," column records exactly which codecs were\neligible per row; the ",[877,2188,2189],{},"compressed_bytes"," and ",[877,2192,2193],{},"ratio"," columns reflect\nthe dispatcher's choice. Since XOR is roughly identity for cost\n(",[877,2196,2197],{},"ratio ≈ 1.0","), Huffman typically wins on a real model — but the\n",[1371,2200,2201],{},"attempt"," proves the bundle loaded, verified, and ran.",[928,2204,2206],{"id":2205},"where-to-go-from-here","Where to go from here",[1879,2208,2209,2216,2224,2229],{},[1882,2210,2211,2215],{},[1017,2212,2214],{"href":1019,"rel":2213},[1021],"Extension system design"," —\nfull design rationale and per-kind ABI signatures.",[1882,2217,2218,2223],{},[1017,2219,2222],{"href":2220,"rel":2221},"https:\u002F\u002Fgithub.com\u002Fkhwstolle\u002Fptwm\u002Ftree\u002Fmaster\u002Fextensions",[1021],"Reference extensions"," —\none passthrough per kind, in either Rust or Python.",[1882,2225,2226,2228],{},[1017,2227,187],{"href":188}," — how to harden\nyour keyring before shipping to others.",[1882,2230,2231,2234],{},[1017,2232,2233],{"href":94},"Extensibility concept"," — the wider design.",[928,2236,2238],{"id":2237},"common-pitfalls","Common pitfalls",[1879,2240,2241,2260,2274,2284],{},[1882,2242,2243,2248,2249,2252,2253,2256,2257,1378],{},[1793,2244,2245,2246],{},"Forgot to add ",[877,2247,879],{}," — ",[877,2250,2251],{},"ptwm ext build"," will report\n",[877,2254,2255],{},"linker error: …unknown target",". Fix:\n",[877,2258,2259],{},"rustup target add wasm32-wasip1",[1882,2261,2262,2265,2266,2269,2270,2273],{},[1793,2263,2264],{},"Tampered with binary after sign"," — install will fail with\n",[877,2267,2268],{},"ContributionUntrusted",". Re-run ",[877,2271,2272],{},"ptwm ext sign"," to refresh the\nsignature.",[1882,2275,2276,2279,2280,2283],{},[1793,2277,2278],{},"Author key not in keyring"," — same error. Run ",[877,2281,2282],{},"ptwm trust add --key …"," first.",[1882,2285,2286,2291,2292,2295],{},[1793,2287,2288],{},[877,2289,2290],{},"out_len \u003C in_len"," — return ",[877,2293,2294],{},"-2"," (BufferTooSmall). The\ndispatcher will then skip your codec and pick a different one.",[2297,2298,2299],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"title":887,"searchDepth":974,"depth":974,"links":2301},[2302,2303,2305,2306,2307,2308,2309,2310],{"id":930,"depth":911,"text":931},{"id":1381,"depth":911,"text":2304},"2. Edit src\u002Flib.rs",{"id":1749,"depth":911,"text":1750},{"id":1784,"depth":911,"text":1785},{"id":1917,"depth":911,"text":1918},{"id":2056,"depth":911,"text":2057},{"id":2205,"depth":911,"text":2206},{"id":2237,"depth":911,"text":2238},"Step-by-step walkthrough from `ptwm ext init` to a signed, installed plane codec.","md",null,{},{"title":183,"description":2311},"DvUDrUEjxDnSSSPZaQTNOdZIvtWPdGZ8wvSYZxPU9RA",[2318,2320],{"title":179,"path":180,"stem":181,"description":2319,"children":-1},"Use the Compressor and Decompressor classes directly from Python.",{"title":187,"path":188,"stem":189,"description":2321,"children":-1},"How PTWM decides whether to load an extension — keyring, capabilities, and the threat model.",1784820663766]