← Commit history
dev skill: the uninstall cascade + the {hive,key} trap
1 file changed
+24
dev-skills/developing-the-bridge/SKILL.md+24@@ -416,3 +416,27 @@ for our own extension, `nbrowser_readiness` reports `claudeExtension:{installed, the needs-extension hint + the layer-1 upsell mention the HONEST human fallback: the user can ask Claude in their browser to work the page interactively, while nbe remains the automation path for ANY AI thread (Adom is not Claude-only - that is the differentiator to state, not hide).++## ⭐ The uninstall CASCADE, and the artifact that actually matters (ab 2.0.35, 2026-08-14)++`bridge_uninstall` now calls a bridge's own `uninstall` verb BEFORE deleting its cache dir, so the+bridge can clean artifacts that live OUTSIDE that dir while its files still exist. Declare it in+`bridge.json` (`"uninstall": "nbrowser_uninstall"`) or ab skips the cascade entirely.++WHY nb needs it more than most bridges: we register **HKCU native-messaging hosts** for Chrome AND+Edge (`Software\<vendor>\NativeMessagingHosts\inc.adom.native_browser`), pointing at a path inside+the cache. Delete the cache without cleaning those and every profile with the extension keeps+dialing a binary that no longer exists - the user gets "Native host has exited" forever, with no+breadcrumb pointing at nb. Verified live: both keys existed and resolved to+`C:/Users/john/.adom/native-browser/host-manifest.json`.++What we clean: both HKCU host keys, `~/.adom/bridges/native-browser`, the activity trail, the icon+cache. What we deliberately do NOT touch: **the nbe extension in the user's browser profile**. That+is theirs; it merely stops working, and `uninstalling-the-extension` walks them through removing it+properly. Never rip an extension out from under a user.++⚠️ THE TRAP THAT ALMOST SHIPPED: ab's registry verbs take **`{hive, key}`**, NOT a single joined+`{path:"HKCU\\Software\\..."}`. A joined path is rejected `bad_args` - and because the cascade is+best-effort (a failure still lets ab delete the cache), it would have failed **silently**, leaving+exactly the orphaned registration the cascade exists to prevent. Check any callback verb's real+signature with `adom-bridge commands` before shipping; do not infer it.