# Structured output quick reference
Cheat sheet for verifier output and reporting.json across all task types.
Start from [README.md](../README.md) Step 3 for the onboarding context.
Every application task uses the same shape:
`text
structured_output.json
contexts[]
key: "task_outcome.primary" โ stable instance id (you choose the suffix)
contextType: "task_outcome" โ type label used by reporting.json match rules
facets[]
key: "outcome_status" โ standard field name from the contract
kind: numerical | categorical | textual
value: ...
`
Three responsibilities:
| Piece | Who owns it | What it does |
|---|---|---|
| Verifier facts | Task author in tests/ | Emit contexts[] + facets[] for one trial |
| Layer 1 automatic aggregation | Platform | Always aggregates every facet (numerical stats, categorical counts, textual samples) |
| Layer 2 extra batch analysis | Task author in reporting.json | Optional LLM bucket summaries and judge scans |
Extension rule for all types:
- keep shared
contextTypeand facet keys exactly as written - add task-specific details in new scenario contexts or behind a
task_prefix - do not rename shared fields to fit one task
Survey
Full guide: [survey/README.md](../survey/README.md)
Canonical task: application/tasks/example-survey_product-feedback
| Context type | Required | How many | Standard facet keys |
|---|---|---|---|
| question_response | Yes | one per answered question (question.) | response (required), reason, confidence |
| trial_summary | Yes | one per trial (survey.summary) | answer_count, trajectory_event_count, mean_numeric_answer |
response kind depends on question type:
- likert โ
numerical - single/multi choice โ
categorical(option id) - free text โ
textual
Default reporting: summarize reason by response for each question_response.
Templates:
survey/survey_structured_output.example.jsonsurvey/survey_reporting.example.json
Chatbot
Full guide: [chatbot/README.md](../chatbot/README.md)
Canonical task: application/tasks/chat_recai
| Context type | Required | Standard facet keys |
|---|---|---|
| task_outcome | Yes | outcome_status, resolution_basis, outcome_reason, next_step_owner, task_goal_label |
| conversation_summary | Recommended | conversation_path, user_turn_count, assistant_turn_count, message_count, process_notes, clarification_question_count |
| user_feedback | Recommended when self-report exists | overall_experience_rating, feedback_reason, need_constraint_satisfaction, personal_preference_satisfaction, clarification_questions_useful, trust_level, effort_rating, felt_understood |
| policy_and_trust | Optional | policy_compliance, groundedness_primary, policy_notes, handoff_appropriateness |
| coordination | Optional | coordination_mode, state_change_achieved, user_action_required, guidance_quality, coordination_notes |
Note: chatbot uses outcome_reason in task_outcome. Web and OS/app use
outcome_explanation for the same role.
Default reporting: summarize outcome_reason by outcome_status, process_notes
by conversation_path, and feedback_reason by satisfaction-style facets.
Templates:
chatbot/chatbot_structured_output.example.jsonchatbot/chatbot_reporting.example.json
Web
Full guide: [web/README.md](../web/README.md)
Canonical task: application/tasks/example-web-playwright_quote-choice
Web tasks use two layers:
1. Shared core โ same contexts and facet keys as OS/app (see [Shared core metrics](shared-core-metrics.md#shared-core-for-web-and-os-app) below) 2. Web-specific layer โ persona-sensitive browse/choose semantics
| Context type | Required | Standard facet keys |
|---|---|---|
| decision | Yes for browse/choose tasks | decision_outcome, basis_primary, reason, decision_subject_label, decision_subject_id, basis_secondary, decision_confidence |
| decision_process | Recommended | exploration_style, options_considered_count, used_search, used_filter_or_sort, comparison_notes |
| web_interaction | Optional | task-specific navigation/interaction facets |
| web_artifact | Optional | artifact validation facets |
| experience | Optional | web-only subjective friction/UI facets |
Default reporting: shared core rules plus decision/process summaries. Merge templates when needed:
web/web_metric_reporting.example.jsonweb/persona_sensitive_reporting.example.json
Templates:
web/web_metric_structured_output.example.jsonweb/persona_sensitive_structured_output.example.json
OS / app
Full guide: [os-app/README.md](../os-app/README.md)
Canonical task: application/tasks/example-computer-use-ios_photo-access-review
OS/app tasks reuse the same shared core as web (see [shared core metrics](shared-core-metrics.md)). Add scenario-specific contexts such as local artifact checks or cross-app handoff slices on top of that core rather than replacing it.
Templates:
os-app/os_app_metric_structured_output.example.jsonos-app/os_app_persona_structured_output.example.jsonos-app/os_app_metric_reporting.example.jsonos-app/os_app_persona_reporting.example.json
Machine-readable shared core: shared_core_metric_contract.example.json
Example template index
| Type | Structured output | Reporting |
|---|---|---|
| Survey | survey/survey_structured_output.example.json | survey/survey_reporting.example.json |
| Chatbot | chatbot/chatbot_structured_output.example.json | chatbot/chatbot_reporting.example.json |
| Web | web/web_metric_structured_output.example.json, web/persona_sensitive_structured_output.example.json | web/web_metric_reporting.example.json, web/persona_sensitive_reporting.example.json |
| OS / app | os-app/os_app_metric_structured_output.example.json, os-app/os_app_persona_structured_output.example.json | os-app/os_app_metric_reporting.example.json, os-app/os_app_persona_reporting.example.json |
| Web + OS shared core | shared_core_metric_contract.example.json | covered by the web/os templates above |