[{"data":1,"prerenderedAt":276},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fdevelopment":150,"\u002Fdocs\u002Fdevelopment-surround":274},[4],{"title":5,"path":6,"stem":7,"children":8,"page":36},"Docs","\u002Fdocs","docs",[9,13,37,62,83,116,121],{"title":10,"path":11,"stem":12},"Development Notes","\u002Fdocs\u002Fdevelopment","docs\u002Fdevelopment",{"title":14,"path":15,"stem":16,"children":17,"page":36},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[18,22,27,32],{"title":14,"path":19,"stem":20,"order":21},"\u002Fdocs\u002Fgetting-started\u002F_dir","docs\u002Fgetting-started\u002F_dir",1,{"title":23,"path":24,"stem":25,"order":26},"Configuration Reference","\u002Fdocs\u002Fgetting-started\u002Fconfiguration","docs\u002Fgetting-started\u002Fconfiguration",2,{"title":28,"path":29,"stem":30,"order":31},"Deployment Guide","\u002Fdocs\u002Fgetting-started\u002Fdeployment","docs\u002Fgetting-started\u002Fdeployment",3,{"title":33,"path":34,"stem":35,"order":21},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start",false,{"title":38,"path":39,"stem":40,"children":41,"page":36},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[42,45,49,53,58],{"title":38,"path":43,"stem":44,"order":26},"\u002Fdocs\u002Fguides\u002F_dir","docs\u002Fguides\u002F_dir",{"title":46,"path":47,"stem":48,"order":26},"Notifications","\u002Fdocs\u002Fguides\u002Fnotifications","docs\u002Fguides\u002Fnotifications",{"title":50,"path":51,"stem":52,"order":21},"Scoring Algorithm","\u002Fdocs\u002Fguides\u002Fscoring","docs\u002Fguides\u002Fscoring",{"title":54,"path":55,"stem":56,"order":57},"Sunset Mode","\u002Fdocs\u002Fguides\u002Fsunset-mode","docs\u002Fguides\u002Fsunset-mode",4,{"title":59,"path":60,"stem":61,"order":31},"Troubleshooting","\u002Fdocs\u002Fguides\u002Ftroubleshooting","docs\u002Fguides\u002Ftroubleshooting",{"title":63,"path":64,"stem":65,"children":66,"page":36},"Project","\u002Fdocs\u002Fproject","docs\u002Fproject",[67,71,75,79],{"title":63,"path":68,"stem":69,"order":70},"\u002Fdocs\u002Fproject\u002F_dir","docs\u002Fproject\u002F_dir",6,{"title":72,"path":73,"stem":74,"order":31},"Changelog","\u002Fdocs\u002Fproject\u002Fchangelog","docs\u002Fproject\u002Fchangelog",{"title":76,"path":77,"stem":78,"order":21},"Contributing","\u002Fdocs\u002Fproject\u002Fcontributing","docs\u002Fproject\u002Fcontributing",{"title":80,"path":81,"stem":82,"order":26},"Contributors","\u002Fdocs\u002Fproject\u002Fcontributors","docs\u002Fproject\u002Fcontributors",{"title":84,"path":85,"stem":86,"children":87,"page":36},"Reference","\u002Fdocs\u002Freference","docs\u002Freference",[88,91,112],{"title":84,"path":89,"stem":90,"order":31},"\u002Fdocs\u002Freference\u002F_dir","docs\u002Freference\u002F_dir",{"title":92,"path":93,"stem":94,"children":95,"page":36},"Api","\u002Fdocs\u002Freference\u002Fapi","docs\u002Freference\u002Fapi",[96,100,104,108],{"title":97,"path":98,"stem":99,"order":26},"API Reference","\u002Fdocs\u002Freference\u002Fapi\u002F_dir","docs\u002Freference\u002Fapi\u002F_dir",{"title":101,"path":102,"stem":103,"order":26},"API Examples","\u002Fdocs\u002Freference\u002Fapi\u002Fexamples","docs\u002Freference\u002Fapi\u002Fexamples",{"title":105,"path":106,"stem":107,"order":57},"API Versioning & Stability Guarantees","\u002Fdocs\u002Freference\u002Fapi\u002Fversioning","docs\u002Freference\u002Fapi\u002Fversioning",{"title":109,"path":110,"stem":111,"order":31},"Common Workflows","\u002Fdocs\u002Freference\u002Fapi\u002Fworkflows","docs\u002Freference\u002Fapi\u002Fworkflows",{"title":113,"path":114,"stem":115,"order":21},"Architecture","\u002Fdocs\u002Freference\u002Farchitecture","docs\u002Freference\u002Farchitecture",{"title":117,"path":118,"stem":119,"order":120},"Release Workflow","\u002Fdocs\u002Freleasing","docs\u002Freleasing",5,{"title":122,"path":123,"stem":124,"children":125,"order":21},"Security Policy","\u002Fdocs\u002Fsecurity","docs\u002Fsecurity\u002Findex",[126,127,131,135,138,141,144,147],{"title":122,"path":123,"stem":124,"order":21},{"title":128,"path":129,"stem":130,"order":57},"Security","\u002Fdocs\u002Fsecurity\u002F_dir","docs\u002Fsecurity\u002F_dir",{"title":132,"path":133,"stem":134,"order":26},"OWASP ZAP API Scan — Baseline Report","\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260310","docs\u002Fsecurity\u002Fzap-baseline-20260310",{"title":132,"path":136,"stem":137,"order":31},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260316","docs\u002Fsecurity\u002Fzap-baseline-20260316",{"title":132,"path":139,"stem":140,"order":57},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260323","docs\u002Fsecurity\u002Fzap-baseline-20260323",{"title":132,"path":142,"stem":143,"order":120},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260324","docs\u002Fsecurity\u002Fzap-baseline-20260324",{"title":132,"path":145,"stem":146},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260406","docs\u002Fsecurity\u002Fzap-baseline-20260406",{"title":132,"path":148,"stem":149},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260529","docs\u002Fsecurity\u002Fzap-baseline-20260529",{"id":151,"title":10,"body":152,"description":263,"extension":268,"links":269,"meta":270,"navigation":271,"path":11,"seo":272,"stem":12,"__hash__":273},"docs\u002Fdocs\u002Fdevelopment.md",{"type":153,"value":154,"toc":262},"minimark",[155,160,174,196,201],[156,157,159],"h2",{"id":158},"execution-mode-architecture","Execution Mode Architecture",[161,162,163,164,168,169,173],"p",{},"Execution mode (dry-run, approval, auto, sunset) is configured ",[165,166,167],"strong",{},"per-disk-group"," on the Rules page. Each disk group has its own ",[170,171,172],"code",{},"Mode"," field that governs how the engine acts on candidates within that group.",[161,175,176,177,180,181,184,185,188,189,192,193,195],{},"The ",[170,178,179],{},"DefaultDiskGroupMode"," field on ",[170,182,183],{},"PreferenceSet"," serves only as a ",[165,186,187],{},"template for newly auto-discovered disk groups",". When the poller discovers a new mount path and creates a ",[170,190,191],{},"DiskGroup"," record, the group inherits the current ",[170,194,179],{}," value. After creation, the group's mode is independent of the global preference.",[197,198,200],"h3",{"id":199},"key-invariants","Key invariants",[202,203,204,212,241,248],"ul",{},[205,206,207,208,211],"li",{},"Route handlers and orchestrators must never use ",[170,209,210],{},"prefs.DefaultDiskGroupMode"," for runtime decisions about existing groups. Always resolve the mode from the disk group itself.",[205,213,214,215,217,218],{},"The only valid uses of ",[170,216,179],{}," are:\n",[219,220,221,227,238],"ol",{},[205,222,223,226],{},[170,224,225],{},"DiskGroupService.Upsert()"," — setting mode on newly created groups",[205,228,229,230,233,234,237],{},"Fallback paths where no disk group association exists (e.g., ",[170,231,232],{},"resolveCurrentMode()"," in deletion worker for legacy queue items without a ",[170,235,236],{},"DiskGroupID",")",[205,239,240],{},"Backup\u002Frestore compatibility",[205,242,243,244,247],{},"The worker stats API returns ",[170,245,246],{},"diskGroupModes"," (a JSON map of group ID → mode) rather than a single global mode string.",[205,249,250,251,254,255,258,259,261],{},"SSE events (",[170,252,253],{},"engine_start",", ",[170,256,257],{},"engine_complete",") carry ",[170,260,246],{}," for real-time UI updates.",{"title":263,"searchDepth":21,"depth":26,"links":264},"",[265],{"id":158,"depth":26,"text":159,"children":266},[267],{"id":199,"depth":31,"text":200},"md",null,{},true,{"title":10,"description":263},"5lvQYTuPUxbp87TdGfiAql6Ogg3QXVGeF5KezIlWOPk",[269,275],{"title":14,"path":19,"stem":20,"description":269,"order":21,"children":-1},1780321562733]