Lattice plugins must be capability-based.
Rules:
- No filesystem access unless a future host API explicitly grants it.
- No process execution in third-party plugins.
- No environment variable access by default.
- No arbitrary network access by default.
- Manifest ids must be stable lowercase identifiers, never paths or user-facing labels. Capability lists must be explicit, non-empty, and duplicate-free so reviews and audit events cannot disagree about what was granted.
- Production manifests for high-risk/system plugins must include a trusted
publisher, artifactdigest_sha256, andsignature_ed25519. Unsigned development manifests are acceptable only before installation/loading. network:apply,task:run,node:admin,ddns:admin,tunnel:admin,monitor:admin,network:plan, andstatic:writemust be treated as high-risk.task:readis read-only and must never grant task creation or remote execution.workerplugins may only declareworker:route,kv:read, andstatic:read.wasmplugins may not declare high-risk host capabilities.- High-risk capabilities require a trusted
systemplugin. - Plugins that affect a node must be constrained by the caller's node allowlist.
- Webhook-style plugins must use the server's guarded outbound HTTP client; they must not dial loopback, private, link-local, metadata, or special-use ranges.
- All privileged operations must be auditable by
lattice-server.
System plugins are trusted built-ins. Third-party plugins should target the future Wasm host or the restricted Worker interface.