Expose committed result members and stable principals

This commit is contained in:
ms2k 2026-07-14 12:12:13 +09:00
commit 3881514e4b

View file

@ -88,6 +88,60 @@ paths:
$ref: '#/components/responses/PreconditionFailed' $ref: '#/components/responses/PreconditionFailed'
default: default:
$ref: '#/components/responses/Error' $ref: '#/components/responses/Error'
/v1/jobs/{job_id}/result/members:
parameters:
- $ref: '#/components/parameters/JobId'
get:
operationId: listJobResultMembers
description: Enumerates members only from the visible committed result.
parameters:
- $ref: '#/components/parameters/Cursor'
- $ref: '#/components/parameters/Limit'
responses:
'200':
description: Authorized page of committed result members ordered by normalized path.
content:
application/json:
schema:
$ref: '#/components/schemas/ResultMemberPage'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/PreconditionFailed'
default:
$ref: '#/components/responses/Error'
/v1/jobs/{job_id}/result/members/{member_id}/content:
parameters:
- $ref: '#/components/parameters/JobId'
- name: member_id
in: path
required: true
schema:
$ref: '#/components/schemas/OpaqueId'
get:
operationId: accessJobResultMember
description: Revalidates current authorization and redirects to a time-limited URL for the exact committed member identity.
responses:
'307':
description: Temporary redirect to the exact committed member. The URL is sensitive and must not be logged or cached.
headers:
Location:
description: Time-limited member URL.
required: true
schema:
type: string
format: uri
Cache-Control:
description: Prevents caching of the credential-bearing redirect response.
required: true
schema:
const: no-store
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/PreconditionFailed'
default:
$ref: '#/components/responses/Error'
/v1/jobs/{job_id}/cancel: /v1/jobs/{job_id}/cancel:
parameters: parameters:
- $ref: '#/components/parameters/JobId' - $ref: '#/components/parameters/JobId'
@ -403,6 +457,10 @@ components:
OpaqueId: OpaqueId:
type: string type: string
pattern: '^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$' pattern: '^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$'
PrincipalId:
description: Internal stable principal identifier mapped to one exact OIDC issuer and subject pair.
allOf:
- $ref: '#/components/schemas/OpaqueId'
Target: Target:
type: object type: object
additionalProperties: false additionalProperties: false
@ -680,7 +738,7 @@ components:
ObjectIdentity: ObjectIdentity:
type: object type: object
additionalProperties: false additionalProperties: false
required: [store, bucket, key] required: [store, bucket, key, checksum]
properties: properties:
store: store:
type: string type: string
@ -691,7 +749,38 @@ components:
version_id: version_id:
type: string type: string
checksum: checksum:
$ref: '#/components/schemas/Sha256Digest'
Sha256Digest:
type: string type: string
pattern: '^sha256:[a-f0-9]{64}$'
ResultMember:
type: object
additionalProperties: false
required: [id, path, size, object]
properties:
id:
$ref: '#/components/schemas/OpaqueId'
path:
type: string
minLength: 1
maxLength: 4096
description: NFC-normalized relative POSIX path validated under architecture.md.
size:
type: integer
minimum: 0
object:
$ref: '#/components/schemas/ObjectIdentity'
ResultMemberPage:
type: object
additionalProperties: false
required: [items, next_cursor]
properties:
items:
type: array
items:
$ref: '#/components/schemas/ResultMember'
next_cursor:
type: [string, 'null']
Job: Job:
type: object type: object
additionalProperties: false additionalProperties: false
@ -700,7 +789,7 @@ components:
id: id:
$ref: '#/components/schemas/OpaqueId' $ref: '#/components/schemas/OpaqueId'
owner: owner:
$ref: '#/components/schemas/OpaqueId' $ref: '#/components/schemas/PrincipalId'
label: label:
type: [string, 'null'] type: [string, 'null']
minLength: 1 minLength: 1
@ -763,6 +852,20 @@ components:
type: object type: object
additionalProperties: false additionalProperties: false
required: [id, fence, worker_incarnation, state, progress, result, failure, created_at, updated_at] required: [id, fence, worker_incarnation, state, progress, result, failure, created_at, updated_at]
allOf:
- if:
required: [state]
properties:
state:
const: AttemptCommitted
then:
properties:
result:
$ref: '#/components/schemas/ResultDescriptor'
else:
properties:
result:
type: 'null'
properties: properties:
id: id:
$ref: '#/components/schemas/OpaqueId' $ref: '#/components/schemas/OpaqueId'