Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions docs/DECISION_DELIVERY.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,36 @@ is checkable the same way: by reading a schema, not by trusting a detector. The
hosted control plane enforces it a third time in Postgres, in the same style as
`human_decision_task_contract_valid`.

## V2: qualification-approved entity wording

V1 uses only domain-neutral wording such as `record` or `item`. A later V2 task
can carry one useful entity class that the exact qualification contract already
approved. The remote emitter accepts only the reviewed remote-safe vocabulary.
The canonical vocabulary and cross-vertical examples are in
[Attended decisions and the halt-learn loop](https://docs.openadapt.ai/concepts/halt-learn-loop/#a-qualified-entity-label-not-a-guessed-domain).

Qualification selects one class from the reviewed vocabulary. If no specific
class fits, it selects the signed neutral `record` or `item` fallback. This
release does not accept an arbitrary custom class for shared presentation.

This is not runtime inference. The producer reads the label from the exact
qualified step and binds the task to the qualification project, qualification
revision, qualification contract digest, and bundle digest. The task has no
field for a screenshot, OCR output, parameter, application name, observed
identity value, or model input. A label says what class of entity the workflow
handles; it never says which entity is on screen.

The runner and client use V2 only after explicit schema negotiation. A peer that
does not negotiate V2 receives the byte-compatible V1 task and renders `record`
or `item`. Before any action continues, the customer-controlled runner reads
the live application and revalidates the required identity and effect
contracts.

!!! note "Release dependency"
This V2 section documents a coordinated Flow, Desktop, Cloud, and Types
release. It must not be published as an available decision path before the
V2 producer, consumer, and negotiated capability are released together.

The one thing this tier gives up is `target_label` — the target control's own
accessible name, which `halt_detail._safe_target_label` releases locally after
six independent proofs. It stays local. The phone therefore says *"OpenAdapt
Expand Down