TenantAtlas/specs/252-platform-localization-v1/contracts/locale-resolution-and-translation-governance.logical.openapi.yaml
ahmido 7613e339c4
Some checks failed
Main Confidence / confidence (push) Failing after 56s
feat: implement platform localization v1 (#293)
## Summary
- add the localization v1 foundation with request-time locale resolution and workspace or user preference handling
- localize the first-wave platform surfaces for auth, shell, dashboards, findings, baseline compare, and review workspace chrome
- add Pest coverage for locale resolution, preference flows, fallback behavior, notifications, and governance surface localization

## Scope
- active spec: specs/252-platform-localization-v1
- target branch: dev

## Notes
- machine-readable artifacts remain invariant and are not localized in this slice
- the branch includes the related spec kit artifacts for the feature

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #293
2026-04-28 19:45:03 +00:00

177 lines
6.3 KiB
YAML

openapi: 3.1.0
info:
title: Platform Localization Logical Contract
version: 0.1.0
summary: Logical contract for locale resolution, preference persistence, and invariant machine-format behavior.
paths:
/localization/context:
get:
summary: Resolve the effective locale for the current request.
operationId: resolveLocalizationContext
description: Admin and tenant planes may resolve from explicit override, user preference, workspace default, or system default. The system plane resolves from explicit override or system default only in v1.
responses:
'200':
description: Effective locale context for the current request.
content:
application/json:
schema:
$ref: '#/components/schemas/ResolvedLocaleContext'
/localization/override:
put:
summary: Set or replace the explicit temporary locale override that sits first in the precedence chain.
operationId: updateExplicitLocaleOverride
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocaleOverrideUpdate'
responses:
'200':
description: Updated locale context after setting the override.
content:
application/json:
schema:
$ref: '#/components/schemas/ResolvedLocaleContext'
'400':
description: Unsupported or malformed locale input was rejected and the request falls back safely.
delete:
summary: Clear the explicit temporary locale override and return to inherited behavior.
operationId: clearExplicitLocaleOverride
responses:
'204':
description: Explicit override cleared.
/users/me/locale-preference:
put:
summary: Persist the authenticated user's personal locale preference.
operationId: updateUserLocalePreference
description: Applies to the workspace-bound `User` actor on admin and tenant planes only. System-panel `PlatformUser` actors do not get a persisted locale preference in v1.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserLocalePreferenceUpdate'
responses:
'200':
description: Updated locale context after saving the preference.
content:
application/json:
schema:
$ref: '#/components/schemas/ResolvedLocaleContext'
'400':
description: Unsupported or malformed locale input was rejected and the request falls back safely.
'403':
description: Caller is authenticated but the current surface or policy does not allow personal locale preference mutation.
'404':
description: The personal preference path is unavailable in the current plane or membership context, including system-panel requests.
/workspaces/{workspaceId}/settings/localization/default-locale:
put:
summary: Persist the workspace-owned default locale through the existing settings surface.
operationId: updateWorkspaceDefaultLocale
description: Applies to workspace-scoped admin and tenant flows only. The system plane does not inherit workspace default in v1.
parameters:
- name: workspaceId
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDefaultLocaleUpdate'
responses:
'200':
description: Updated workspace default locale metadata.
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceLocaleSetting'
'400':
description: Unsupported or malformed locale input was rejected.
'403':
description: Caller is a workspace member but lacks permission to manage workspace settings.
'404':
description: Workspace is inaccessible in the current plane or membership context.
components:
schemas:
SupportedLocale:
type: string
enum:
- en
- de
LocaleSource:
type: string
enum:
- explicit_override
- user_preference
- workspace_default
- system_default
ResolvedLocaleContext:
type: object
required:
- locale
- source
- fallback_locale
- machine_artifacts_invariant
properties:
locale:
$ref: '#/components/schemas/SupportedLocale'
source:
$ref: '#/components/schemas/LocaleSource'
fallback_locale:
type: string
const: en
user_preference_locale:
anyOf:
- $ref: '#/components/schemas/SupportedLocale'
- type: 'null'
workspace_default_locale:
anyOf:
- $ref: '#/components/schemas/SupportedLocale'
- type: 'null'
machine_artifacts_invariant:
type: boolean
const: true
UserLocalePreferenceUpdate:
type: object
required:
- preferred_locale
properties:
preferred_locale:
anyOf:
- $ref: '#/components/schemas/SupportedLocale'
- type: 'null'
description: Null clears the personal preference and returns the user to inherited behavior.
LocaleOverrideUpdate:
type: object
required:
- override_locale
properties:
override_locale:
$ref: '#/components/schemas/SupportedLocale'
description: Sets the explicit temporary override that takes precedence over persisted preference and workspace default.
WorkspaceDefaultLocaleUpdate:
type: object
required:
- default_locale
properties:
default_locale:
anyOf:
- $ref: '#/components/schemas/SupportedLocale'
- type: 'null'
description: Null returns the workspace to system-default inheritance.
WorkspaceLocaleSetting:
type: object
required:
- workspace_id
- default_locale
properties:
workspace_id:
type: integer
default_locale:
anyOf:
- $ref: '#/components/schemas/SupportedLocale'
- type: 'null'