Merge branch 'feat/ai-jobs-stored-text' into release/v1.39.0

This commit is contained in:
Marc-André Bombeck committed 2026-09-24 09:29:54 +02:00
commit c9534b343e
114 files changed
+6002 -2436

No files matched your search

+31 -9
View File
@@ -12774,6 +12774,7 @@ paths:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
description: Narrow to one consent kind. Omit for the full keyspace.
responses:
"200":
@@ -12785,8 +12786,9 @@ paths:
- $ref: "#/components/schemas/ConsentLatestForKindEnvelope"
- $ref: "#/components/schemas/ConsentLatestByKindEnvelope"
"400": &a22
description: "`kind` was present but is not one of `ai_full`, `ai_insights_only`, `ai_coach`. Multi-issue envelope;
nothing was read or revoked. The consent family answers 400 here where the rest of the API answers 422."
description: "`kind` was present but is not one of `ai_full`, `ai_insights_only`, `ai_coach`, `ai_extraction`.
Multi-issue envelope; nothing was read or revoked. The consent family answers 400 here where the rest of the
API answers 422."
content:
application/json:
schema:
@@ -12809,9 +12811,18 @@ paths:
each revocation is audit-logged.
Revoking `ai_full` does NOT switch off `documentsAutoAiRead`; that flag is written through PATCH
/api/auth/me/documents-auto-ai-read and turning it on mints a fresh receipt. A client offering both controls
should show them as the two separate things they are.
Revoking `ai_full` or `ai_extraction` does NOT switch off `documentsAutoAiRead`, but it does stop document
reading: the document gate reads the receipt, not the switch, so a revocation wins over a switch left on.
Turning the switch on again mints a fresh `ai_extraction` receipt through PATCH
/api/auth/me/documents-auto-ai-read. A client offering both controls should show them as the two separate things
they are.
When a revocation leaves no receipt covering the analysis (`ai_insights_only` or `ai_full`), the same
transaction deletes the text a model wrote under it that can be written again: per-metric status notes, the
cached briefing, model-written period narratives, reaction lines and workout paragraphs. Coach conversations,
facts and plans and document summaries are the person's records and stay. A deletion is audit-logged with counts
only (`consent.ai.purge`).
parameters:
- in: query
name: kind
@@ -12822,6 +12833,7 @@ paths:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
description: Revoke one kind. Omit to revoke the latest active receipt across every kind.
responses:
"200":
@@ -23992,8 +24004,8 @@ components:
type: boolean
required:
- documentsAutoAiRead
description: Turn automatic AI reading of newly uploaded documents on or off. Turning it on also mints an `ai_full`
consent receipt and schedules a catch-up over the existing vault.
description: Turn automatic AI reading of newly uploaded documents on or off. Turning it on also mints an
`ai_extraction` consent receipt and schedules a catch-up over the existing vault.
InjectionSitePrefsPatchRequest:
type: object
properties:
@@ -26151,6 +26163,7 @@ components:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
artefact:
type: string
minLength: 1
@@ -58183,6 +58196,7 @@ components:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
signedAt:
type: string
revokedAt:
@@ -58279,6 +58293,7 @@ components:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
receipt:
anyOf:
- $ref: "#/components/schemas/SerialisedConsentReceipt"
@@ -58301,6 +58316,7 @@ components:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
signedAt:
type: string
format: date-time
@@ -58357,13 +58373,18 @@ components:
anyOf:
- $ref: "#/components/schemas/SerialisedConsentReceipt"
- type: "null"
ai_extraction:
anyOf:
- $ref: "#/components/schemas/SerialisedConsentReceipt"
- type: "null"
required:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
additionalProperties: false
description: "The latest active receipt for every kind. All three keys are always present: a null value means the kind
is not granted, so a client never has to read absence as ambiguity."
description: "The latest active receipt for every kind. Every key is always present: a null value means the kind is not
granted, so a client never has to read absence as ambiguity."
ConsentRevokeForKindEnvelope:
type: object
properties:
@@ -58412,6 +58433,7 @@ components:
- ai_full
- ai_insights_only
- ai_coach
- ai_extraction
receipt:
$ref: "#/components/schemas/SerialisedConsentReceipt"
required: