pub fn validate_warnings(compose: &Compose) -> Vec<ValidationWarning>Expand description
Capability-mismatch sweep, separate from validate so the
errors-only contract (and every up / down / reload / bot call
site) stays untouched. teamctl validate calls both and prints
warnings without flipping the exit code.
Hooks, sub-agents, and skills are claude-code-only today — the render
layer already tracing::warn!s when it drops them (render can run
without validate), but those warns are invisible in normal CLI runs;
this is the operator-visible surface. effort: is consumed by both
claude-code (--effort) and codex (-c model_reasoning_effort); any
other wrapper arm ignores $EFFORT — opencode included, whose plain
TUI rejects --variant. permission_mode: maps to flags in the
claude-code, codex, and opencode arms (opencode has no full-bypass
upstream, so bypassPermissions degrades to --auto and gets its own
warning). And ${VAR} placeholders in declared MCP env values are
expanded by claude-code alone — codex and opencode hand the server the
literal string.