GoogleCloudPlatform / GoogleCloudPlatform/BigQuery-Agent-Analytics-SDK
adk-2.0 consumer: representative workflow fixture
- Dominant language
- Python
- Stars
- 47
- Forks
- 21
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 33
Description
Parent tracker: #190 (v15 contract).
Wave: 5 — Consumer fixture.
## Contract
A single representative workflow fixture used by every cross-event view test. Must cover:
- **Branch fanout** (parallel agent silos producing distinct `attributes.adk.branch` values).
- **Agent transfer** (chain of 2+ `AGENT_TRANSFER` events).
- **Event compaction** with **fractional-second timestamps** (so `compaction_windows` can prove the `TIMESTAMP_MICROS` conversion).
- **Agent state checkpoint** — both shapes:
- `{agent_state: null, end_of_agent: true}`
- `{agent_state: {...}, end_of_agent: false}`
- **Long-running pause/resume spanning multiple invocations** (the real cross-invocation case).
- **HITL-orphan defensive row (synthetic, not producer-generated)**: insert directly into the consumer fixture a `TOOL_COMPLETED` row with `attributes.adk.pause_orphan = true` and `attributes.adk.pause_kind = 'hitl_confirmation'`. **The ADK plugin must NOT emit this row** — per #199, HITL completions stay on the `HITL_*_COMPLETED` event flow. This synthetic row exists only to prove the `long_running_tool_durations` filter (#215) is defensive against malformed/foreign rows. Mark the row's origin in the fixture so future readers don't misinterpret it as a producer requirement.
- **All scope shapes**:
- Full-path node scope (`/@`)
- Bare node scope (`name@`) — must classify as `node_run`, not `function_call`
- ADK-generated `adk-...` function-call-id scope
- Model-provided non-`adk-` function-call-id scope (`call_abc123`, `toolu_xyz`) — must classify as `function_call` without prefix dependence
- Unscoped (`scope = null`)
- **Source Event fan-out**: at least one source `Event` that emits two BQAA rows (for the `scope_cardinality` fan-out test).
## Acceptance
- [ ] All bullets above are reproducible via the fixture.
- [ ] The HITL-orphan row is **synthetic / direct BigQuery insert**, not plugin-emitted. Fixture documentation explicitly states this and references #199 for the producer-side guarantee.
- [ ] Fixture is referenced by every cross-event view test in Wave 5.
## References
- #190 (v15 fixture requirements scattered through producer/consumer sections).
- #199 (HITL completions stay on the `HITL_*_COMPLETED` flow — the synthetic HITL-orphan row is defensive, not a producer output).
- #215 (consumes the synthetic HITL-orphan row for its exclusion assertion).
Contributor guide
Assessment
This issue has not been assessed yet.