Generated from a diff of the hostedai-user backend between branch ariel (2.4.0, 2026-06-11, 8c4bd682) and branch ariel_1 (2.4.1, 2026-07-01, f534bbbe). 410 commits in range. Endpoint changes are verified against actual route registration in main.go, not Swagger annotations alone; schema changes are diffed from docs/swagger.json.
1. Summary
Old → New: 2.4.0 (ariel) → 2.4.1 (ariel_1).
Endpoints (live routes):7 added, 0 removed. 1 method migration (
/logout— see §3). Registered routes 330 → 337.Headline additions: a full user-facing recipe execution-logs surface (list / get / ansible-logs / delete / report), a team GPU metrics endpoint, and a POST /logout endpoint.
Headline contract change: a large internal Go package reorganization — DTOs were split out of the
modelspackage into domain packages (types,pricing,resourcepolicy,gpuaas,baremetalsub,sharedvolume,common). This renames ~128 Swagger schema definitions with identical fields. The JSON wire format is unchanged; only generated schema names change (see §7.1 and §3).Breaking changes (wire contract): 0. No JSON request/response field was removed or retyped for any live endpoint.
Deprecations: 1 —
GET /logoutis now a deprecated back-compat alias forPOST /logout.
Metric | Count |
|---|---|
Registered routes (main.go) | 330 → 337 |
Documented operations (Swagger) | 327 → 333 |
Genuinely new endpoints (live routes) | 7 |
Newly documented endpoints (already live in 2.4.0) | 1 |
Removed endpoints (live routes) | 0 |
Removed from Swagger only (doc cleanup, never routed) | 3 |
Breaking changes (wire contract) | 0 |
Deprecations | 1 ( |
Renamed schemas / DTOs (package move, identical fields) | ~128 (2 gained fields) |
New schemas / DTOs | 39 |
Removed schemas / DTOs (stale, never routed) | 3 |
2. ⚠️ Breaking Changes
No breaking wire changes. Every live endpoint keeps its JSON request/response field names and types. The one item integrators must act on is a code-generation concern, not a runtime one — see §3 (schema-name refactor) and the Integrator Migration Guide.
3. ⚠️ Deprecation Notices & Code-generation Impact
Item | Status | Detail & recommended path |
|---|---|---|
| DEPRECATED | Logout moved to |
Package-prefixed Swagger schema names (~128 definitions) | CHANGING | DTOs were moved out of |
What this refactor is not: it is not a removal of 128 models. Matching old and new definitions by name shows 128 pairs with byte-identical field sets. Only 2 gained fields (both additive): sharedvolume.SharedVolumeListing (+ currency_code, currency_symbol) and common.ErrorJson (+ trace_id).
4. New Endpoints (live routes)
All verified as new route registrations in main.go (not present in 2.4.0).
Method | Path | Handler | Purpose |
|---|---|---|---|
GET | /api/user/recipes/execution-logs | GetUserRecipeExecutionLogs | List the user's recipe execution logs (paginated). |
GET | /api/user/recipes/execution-logs/{id} | GetUserRecipeExecutionLog | Get a single recipe execution log. |
GET | /api/user/recipes/execution-logs/{id}/ansible-logs | GetUserRecipeAnsibleLogs | Get the Ansible logs for a recipe execution. |
DELETE | /api/user/recipes/execution-logs/{id} | RemoveUserRecipeExecutionLog | Delete a recipe execution log. |
POST | /api/user/recipes/execution-logs/{id}/report | ReportRecipeExecutionIssue | Report an issue with a recipe execution. |
GET | /api/pods/team-metrics | TeamMetrics | GPU/team usage metrics ( |
POST | /api/logout | LogOut | New primary logout method (replaces |
5. Newly Documented & Doc-only Endpoints
Method | Path | Note |
|---|---|---|
GET | /api/team/{team_id}/suspend-impact | Newly documented. Live route in both 2.4.0 and 2.4.1 (handler |
POST | /api/global-admin/users | DOC GAP Appears in Swagger (summary “Create a full-admin user (test provisioning)”, DTO |
6. Removed / Cleaned-up (documentation only)
No live route was removed. The following left Swagger only; none was a callable endpoint in 2.4.0. No client impact.
Swagger path (2.4.0) | Reason |
|---|---|
GET /logout | Superseded by |
GET /policy-team | Handler |
POST /instant-stats | Never registered as a live route in either branch. Swagger entry removed. |
7. Schema / DTO Changes
7.1 Package reorganization (~128 renamed definitions — identical fields)
DTOs were moved from models into domain packages. Swagger definition names changed accordingly; field names and types are unchanged. Representative examples below — see §3 for integrator impact.
Target package | Examples (old → new) |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7.2 New definitions (39)
New feature DTOs
New domain-package representations (created by the ongoing refactor)
7.3 Removed definitions (3)
models.InstantStats, models.CreateInstantStatsOpts (tied to the never-routed POST /instant-stats), and models.PolicyTeam (tied to the never-routed GET /policy-team). No client impact — the endpoints were never callable.
8. QA Follow-up
Doc gap:
POST /global-admin/usersis documented but not routed (§5). Either register the route or remove the annotation.Schema-name churn: the package reorganization (§7.1) is in progress across releases. Recommend stabilizing OpenAPI schema names (e.g. via
swaggo@namedirectives) and adding a CI gate that fails on unintended schema-name/field changes, to prevent this recurring in 2.4.2+.
The customer-facing companion to this page is the child page User Panel API — 2.4.0 → 2.4.1 (Integrator Migration Guide). Keep both in sync when the diff is revised.