CI / Lint (ruff) (pull_request) Successful in 7s
CI / Tests (py3.10 / ubuntu-latest) (pull_request) Successful in 11s
CI / Tests (py3.12 / windows-latest) (pull_request) Successful in 25s
CI / Tests (py3.12 / ubuntu-latest) (pull_request) Successful in 10s
CI / Tests (py3.13 / ubuntu-latest) (pull_request) Successful in 11s
CI / Catalog signature (pull_request) Successful in 6s
Introduce the server-package axis (orthogonal to ClientSpec): a frozen ServerSpec dataclass + SERVER_SPECS registry that the sidecar (#91), version-pin (#92) and permission (#93) work all hang off. - ServerSpec carries env_flags / removed_flags / drift_flags / sidecar_paths / sidecar_doc_path / schema. FLAG_ENV_MIGRATIONS is now a derived view of the registry, so every existing reader and the migration functions keep the exact shape #89 shipped — the migration LOGIC is unchanged, only the DATA grew. - resolve_server_spec(data) is the ServerSpec entry point; detect_migratable_package is a thin name-only wrapper over it (behaviour identical). - Add the verified #4 follow-ups: --sudoPassword AND --suPassword now auto-migrate to SSH_MCP_SUDO_PASSWORD (two flags → one var; existing no-clobber handles it). --disableSudo stays warn-only (sudo is now a role/policy, no env replacement). - Add drift_warnings(): --maxChars=none changed meaning (v1 silently capped at 5000 chars). Warn-only, no auto-fix; matches inline and separate arg forms. - Seed ssh-mcp's verified per-platform sidecar TOML paths and zod enums (auth/approvalMode/role/port) as data for later issues. Pure core + tests, no GUI. One #89 test (sudoPassword now migratable) updated to reflect the intended data growth, with a comment citing the verified facts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>