[Layer 2] Cross-project result envelope tracking (every_eval_ever 0.2.2 + additional_details)
### Purpose Track Layer 2 cross-project result envelope work at the `drupal/ai` umbrella level. Implementation lives in per-module child issues. This issue exists so reviewers and maintainers can see Layer 2 progress without walking every module queue. Layer 2 is defined in the Drupal Eval Commons umbrella ([#3586445](https://git.drupalcode.org/project/ai/-/work_items/3586445)) as the cross-harness result envelope. The chosen shape is EvalEval's `every_eval_ever` (EEE) schema 0.2.2 with Drupal metadata in EEE's `additional_details` slots. The earlier `x_drupal` framing was dropped because EEE 0.2.2 declares `additionalProperties: false` at root. Webchick's proof-of-concept ([MR !37 on ai_best_practices](https://git.drupalcode.org/project/ai_best_practices/-/merge_requests/37)) validates this shape end-to-end. Published reference data: https://huggingface.co/datasets/webchick/eval-results-poc ### Scope Per-module adapters tracked under this issue: - **`ai_eval`:** [#3591187](https://www.drupal.org/project/ai_eval/issues/3591187), filed 2026-05-20. - **`ai_agents_test`:** TBD. Will file after coordination with Marcus as maintainer. - **`ai_observability`:** already emits OpenTelemetry spans and metrics through the `opentelemetry` and `opentelemetry_metrics` contrib modules (`AiOtelSpansEventSubscriber`, `AiOtelMetricsEventSubscriber`), but with ad-hoc attribute names (`provider`, `model`, `token_usage` as a serialized array, span name `'AI provider request'`) rather than the OTel GenAI semantic conventions (`gen_ai.system`, `gen_ai.request.model`, `gen_ai.usage.input_tokens`). Aligning attributes to `gen_ai.*` is a separate sibling; the existing emission path can be reused. Schema work: no Drupal-side schema file needed. EEE 0.2.2 is the contract. Drupal contributions live in `additional_details` slots only. ### Definition of done - All per-module adapters merged. - Each adapter ships one sample envelope file, linked from the adapter's standard documentation surface. - The Layer 4 browser (separate umbrella sibling) reads across modules with no per-module shape mapping. ### Related - Umbrella: [#3586445](https://git.drupalcode.org/project/ai/-/work_items/3586445) - Companion tracker: [#3588915](https://www.drupal.org/project/ai_best_practices/issues/3588915) - `ai_eval` Layer 2 adapter: [#3591187](https://www.drupal.org/project/ai_eval/issues/3591187) - `ai_eval` Layer 2 OTel input: [#3591188](https://www.drupal.org/project/ai_eval/issues/3591188) - Related research (cross-harness merging): [#3585124](https://www.drupal.org/project/ai_agents_test/issues/3585124) --- AI-Generated: Yes (Used Claude Code with the `drupal-gitlab` skill to draft this issue body, verify the `ai_observability` claims against the actual code in `web/modules/contrib/ai/modules/ai_observability/`, and file via the work items API.)
issue