Repository navigation
Release 0.16.0
XMC Release 0.16.0
Release Version Determination: Minor bump (
0.15.0->0.16.0).
Rationale: Introduces interactive and headless per-user CLI OAuth2 login (xmanager login) backed by ESS schema migration016_cli_login_codes, adds/v1/Nginx proxying in the Web UI, hardens gRPC deployment admission and OAuth2 session verification, delivers dashboard ordering andxdashIAM fallback improvements, and advances behind-the-flag capabilities for Components (cluster ownership fencing via migration015_component_ownership_fence, cold-standby takeover, per-CR UID isolation, and least-privilege RBAC) and PostgreSQL storage parity.
🌟 1. Public Changes (Available Out-of-the-Box)
🚀 Major Highlights & Database Migrations
- [Action Required / Database Migrations] Spanner & PostgreSQL ESS Schema Migrations (
015&016): This release adds ESS schema migrations015_component_ownership_fence(ComponentOwnershipFencetable for cluster epoch fencing, #1234) and016_cli_login_codes(CLILoginCodestable for one-time CLI OAuth2 login code exchange, #1314). When upgrading an existing deployment, ensure Spanner migrations are applied (executed automatically by default duringdev_env.py gke-deployandgke-upgrade).
✨ New Features & Improvements
- Interactive & Headless CLI OAuth2 Login (
xmanager login): Added end-to-end per-user CLI OAuth2 authentication flows in the Experiment State Server (pkg/auth/oauth2), including sealedcli_loginticket cookies (#1348), loopback callback completion on/api/callbackpersisted viaCLILoginCodes(016_cli_login_codes, #1314), one-time authorization code exchange for per-user XMC session tokens (#1315), and a headless manual confirmation page for remote/SSH sessions (#1329). Migrated all example workloads and CLI guides toxmanager login(#1324) and standardizedxmanagerCLI installation onpipacross examples, docs, and nightly E2E (#1377).- Note: Requires
xmanager >= 0.8.5.post1on the client (pip install -U "xmanager>=0.8.5.post1"or re-runpython3 deploy/cli/install_xmanager.py).
- Note: Requires
- Web UI
/v1/Reverse Proxy to Experiment State Server: Configured the Web UI Nginx server (cmd/ui/nginx.conf) to proxy/v1/API requests directly to the Experiment State Server (#1369).
🐛 User-Facing Bug Fixes & Stability
- gRPC Deployment Admission, Session Token Hardening & Production Auth Guards: Enforced deployment-level admission checks across gRPC servers in ESS, XID Service, Dashboard Service, and Health Service (#1312), required verified email claims and normalized user identities at OAuth2 sign-in and session token parsing (#1311, #1313), and blocked
disableAuthenticationandmockAuthin Helm templates outside development environments (#1321). - Pre-XID Creator ACL Check & Default Experiment Owner: Fixed
CreateExperimentin ESS to validate the caller's creator ACL before provisioning an XID from the XID Service and to default the experimentownerto the authenticated creator when omitted (#1323). - Long Token Wrapping in Web UI Status Messages: Fixed long unbroken tokens in experiment and work unit status messages overflowing table cells in the Web UI (#1373).
🚀 2. Production-Ready Features Behind Feature Flags (Safe to Enable)
The following capabilities are fully developed, verified, and safe to be enabled. Their default enablement is temporarily postponed solely to align with managed solution milestones or external BYOD prerequisites.
🔹 [Flag: enable_metrics & dashboard_service_deployment_enabled] Metrics Pipeline & Dashboard Service
- How to enable:
- Metrics Ingestion: Set
enable_metrics: trueindeploy/ctk_v2/xmc-deployment-template.yaml(ormetrics.enabled: trueindeploy/helm/values.yaml). - Dashboard Service: Set
dashboard_service_deployment_enabled: trueindeploy/ctk_v2/xmc-deployment-template.yaml(ordashboardServiceDeployment.enabled: trueindeploy/helm/values.yaml). (Note: Dashboard Service requires BYOD storage devices—see the deployment README—and also requiresenable_metrics/metrics.enabledto be enabled for workload metrics data to be generated).
- Metrics Ingestion: Set
- What's New:
- Newest-First Default Ordering in
ListDashboards: FixedListDashboardsin Spanner dashboard storage to order dashboards newest-first (create_time DESC) by default when no explicitorder_byclause is provided (#1298). - Dashboards List Table Row Border Alignment & Screenshot Test: Fixed row border alignment in the Web UI Dashboards list page (
/dashboards) and added golden Playwright screenshot verification (#1306). xdashPython SDK IAM Token Fallback & Metrics Addon Setup Script: Added Google Cloud IAM identity token fallback to thexdashPython SDK client and addeddeploy/addons/metrics/setup_metrics_addons.shto automate ClickHouse metrics addon setup (#1305).
- Newest-First Default Ordering in
🧪 3. In-Development / Experimental Features Behind Flags
Warning
The following capabilities are under active ongoing development, experimental, and may not yet be functional. They are available for early preview and evaluation by enabling their deployment flags in deploy/ctk_v2/xmc-deployment-template.yaml (or deploy/ctk_v2/xmanager-cloud.yaml) and Helm values.yaml.
🔹 [Flag: enable_components] Components
- How to enable: Set
enable_components: trueindeploy/ctk_v2/xmc-deployment-template.yaml(orcomponentsDeployment.enabled: trueindeploy/helm/values.yaml). - What's New:
- Cluster Ownership Fence, Epoch Declaration & Cold-Standby Takeover: Added the
ComponentOwnershipFenceschema (015_component_ownership_fence) andDeclareClusterEpochRPC in CMS (#1234), declaredxmc-bridgecluster identity and epoch to CMS on startup (#1273), enforced cluster ownership fencing and source-object ownership across sourced intents, observations, deactivations, and CR deletion cleanup (#1233, #1235, #1238, #1240), held fenced bridges in cold standby (#1236), and added store-backed CMS ownership Prometheus gauges and DR takeover documentation (#1243, #1275). - Per-CR UID Isolation, Same-Cluster Recreated CR Adoption & Status Tracking: Isolated per-CR Helm actuation state by Kubernetes UID (#1239), enabled seamless adoption of recreated
ComponentCRs on the same cluster viaexpected_owner_uid(#1274), recordedstatus.componentIdandstatus.componentGenerationonComponentCRs (#1237, #1241), reduced steady-state bridge log noise (#1244), and added disjunctiveordependency rules tocomponent-linter(#1341). - Least-Privilege
xmc-bridgeRBAC & Modular Bridge/Store Subpackages: Scopedxmc-bridgeRBAC to least-privilege workload and wrapper resources (removingcomponentsDeployment.rbac.clusterScope, #1242), and decomposedpkg/components/bridge(helm,statusdetector,healthprobe) andpkg/components/store(memory,spanner,ownership,dependency,lifecycle) into dedicated subpackages (#1362, #1363, #1364, #1365).
- Cluster Ownership Fence, Epoch Declaration & Cold-Standby Takeover: Added the
🔹 [Flag: enable_managed_mldiagnostics] Managed ML Diagnostics
- How to enable: Set
enable_managed_mldiagnostics: trueindeploy/ctk_v2/xmc-deployment-template.yaml. - What's New:
- Configurable MLRun Project, Location & Service Account Impersonation: Added reconciler configuration flags to override the target GCP project, location, and service account impersonation for MLRun synchronization and managed XProf sessions (#1370).
⚙️ 4. Operational, Infrastructure & Engineering Velocity
Changes relevant to cluster operators, CI/CD, and internal architecture that do not alter the end-user interface.
- PostgreSQL Storage Engine, Query Dialect & Schema Parity: Added the PostgreSQL connection pool,
DBTXtransaction runner, SQLSTATE error translator, and migration runner CLI (internal/storage/postgres, #1284, #1287, #1308), implemented the PostgreSQLpausestaterepository with row locking (#1357), wiredpgxpool andDBTXacross all PostgreSQL repository packages (#1310, #1326, #1335, #1351), added PostgreSQL table views and dialect support toQueryGeneratorandliststatement(#1301, #1336, #1338, #1339), and added a PostgreSQL testcontainer harness and Spanner-vs-PostgreSQL schema parity checks (#1291, #1356, #1371, #1372). - KinD Profile Migration, 3P ClickHouse & WorkUnit Lifecycle E2E Suites: Added KinD E2E test suites verifying 1P gateway rolling upgrades, 3P ClickHouse continuity, and snapshot drift across profile migrations (#1383, #1384, #1389), expanded E2E coverage for WorkUnit lifecycle, batch mutations, and live priority updates (#1292), and hardened the Nightly ROD UI E2E paginator selector against
aria-disabledbuttons (#1295). - UI Codebase Flattening, Backend Cleanups & Dependency Security: Flattened legacy
utils/directories and_helperfiles across the Angular Web UI (#1392), extracted shared WorkUnit status message and history helpers (#1255), dropped the unused Spanner client from the Actuator K8s client (#1382), remediated npm Dependabot alerts (@angular/router,follow-redirects,vite,launch-editor, #1340, #1347, #1391), and refined CI incremental approval policies and engineering documentation (#1299, #1300, #1304).