- Store gate pattern: wrap store-backed UI in `<template x-if="$store.myStore">` and mount cleanup on the inner element.
- Store definition: use `createStore` from `/js/AlpineStore.js`; do not register Alpine stores inline in HTML or via `alpine:init`.
- Notifications: use `toastFrontendError`, `toastFrontendSuccess`, or backend notification helpers; do not render inline error boxes.
- Python extensions: use `extensions/python/<point>/` for named lifecycle hooks and `extensions/python/_functions/<module>/<qualname>/<start|end>/` for implicit `@extensible` hooks. The flattened `extensions/python/<module>_<qualname>_<start|end>/` layout is stale and should be flagged.
- API handlers: subclass `ApiHandler` and return a dict or `Response`.
- Tools: subclass `Tool` from `helpers.tool`.
- AgentContext imports: use `from agent import AgentContext, AgentContextType`, never `helpers.context`.
- Hooks runtime targeting: use `sys.executable` only for framework runtime work and `/opt/venv/bin/python` for agent-runtime installs.
- execute.py pattern: expose `main()` and end with `if __name__ == "__main__": sys.exit(main())`.
- Community contribution: plugin name must match `^[a-z0-9_]+$`, match the directory name, and stay unique in the published index.
- LICENSE: a file named `LICENSE` at the plugin root is optional for local-only plugins but required at the repository root before Plugin Index submission; if missing, rate Structure Validation as warning (not pass) and state that clearly in findings.
