You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Parent: #435 (AgentForensics RFC — automated failure taxonomy and span-level trace auditing). This is the next engineering slice after span-level G1 localization #466 (PR #467 library + PR #468 presenter e2e), and the native-writer analog of #463: publish already-landed localization as pinned snapshot rows.
The native agent_events writer landed in feat(evalbench): native agent_events snapshot writer (#463) #464 (head f5c6109): NativeAgentEventsRun publishes events / scores / manifest / failed_sessions from production ADK agent_events with no EvalBench source tables in the path.
The span-level G1 library landed in feat(evalbench): span-level G1 taxonomy on span_id (#466) #467 (head a7fd389, dual Codex+Kimi LGTM, P0=0 P1=0, CI green): span_taxonomy.py with label_native_run / label_failed_session_spans / SpanFailureLabel.as_tuple().
Phase 2 localization currently exists as a library, not as snapshot data. #467 already emits the RFC shape (trace_id, span_id, failure_category, evidence, confidence) for the widget-stock silence session — inspectable in Python tests and a --fixture presenter, but not part of the BQAA-owned snapshot contract. Session-level G1 is queryable via failed_sessions; span labels are not.
Do not reimplement span_taxonomy or invent a new taxonomy or a second localizer. The missing piece is publication: NativeAgentEventsRun.materialize (or a thin sibling that inherits it) should write a BQAA-owned span-labels table keyed by the frozen pin (job_id, import_version), joinable to failed_sessions via the frozen eval_id rule.
Session-level failed_sessions + G1 remains the denominator. Span rows localize; they never classify or replace it.
Goal
On a native snapshot of the widget-stock session 7e352c34 (full id 7e352c34-4c1c-4395-acd5-fb3c8f215346), the published span-labels rows make the AGENT_STARTING silence inspectable as data:
real span_idb7ad6b7169203331, target_kind="gap_after_span";
the frozen categories task/planning, finalization, tool blockers;
evidence that no subsequent TOOL_STARTING / check_inventory / AGENT_COMPLETED occurred.
Source of truth is production ADK agent_events (native path). The EvalBench adapter (#97, evalbench-import) stays optional; this slice must not require EvalBench source configs / results / scores.
Reuse label_native_run with the frozen EvalScorePolicy({"goal_completion": 1.0}) — per the #468 P1 finding, the default empty policy drops task/planning.
Acceptance (widget-stock, fixture-testable, no live BigQuery)
Session-level G1 for 7e352c34 still yields task/planning, finalization, tool blockers — unchanged.
Published span-label rows for that session are exactly the three library rows (same span/trace ids, categories, gap_after_span, evidence strings) and carry (job_id, import_version) with job_id=mvp-e2e-real-traces.
Identity: eval_id = session_id[:8] when unique in the snapshot / join set; full session_id on first-8 collision. Span rows must stay joinable to the same eval_id that failed_sessions / G1 already uses.
No synthetic span identifiers. Rows without a real span_id fail closed.
Frozen G1 names only (v0.1.0). No SANA fork, no new category strings. If a test proves a span cannot be labeled with the frozen three, preserve the failing case and defer the taxonomy change to a separate issue.
Offline unit tests only: no live BigQuery, no --synth, no live/LLM judge, no production agent_events writes.
Prefer inheriting EvalBenchRun.materialize / NativeAgentEventsRun rather than a parallel publisher. A thin CLI extension of evalbench-native-import is allowed; do not invent a new command family.
Guardrails
Clock OFF. This issue does not start the six-week clock, seal preregistration, or kick the Week 1 snapshot job.
Parent: #435 (AgentForensics RFC — automated failure taxonomy and span-level trace auditing). This is the next engineering slice after span-level G1 localization #466 (PR #467 library + PR #468 presenter e2e), and the native-writer analog of #463: publish already-landed localization as pinned snapshot rows.
Sequencing
a7fd389— not on docs(evalbench): consolidate native import and span-G1 walkthroughs #468's demo commits, not on feat(evalbench): native agent_events freeze e2e (#463) #465, not on feat(evalbench): Week 0 freeze e2e team demo on the widget-stock session (#435) #462, and not onmain. GitHub showing the feat(evalbench): mechanical failure-taxonomy scaffold from failed-session flags (#435) #458–feat(evalbench): span-level G1 taxonomy on span_id (#466) #467 file set againstmainis expected stacking, not a finding.failure_taxonomy.py,g1_frozen: true).agent_eventswriter landed in feat(evalbench): native agent_events snapshot writer (#463) #464 (headf5c6109):NativeAgentEventsRunpublishes events / scores / manifest /failed_sessionsfrom production ADKagent_eventswith no EvalBench source tables in the path.a7fd389, dual Codex+Kimi LGTM, P0=0 P1=0, CI green):span_taxonomy.pywithlabel_native_run/label_failed_session_spans/SpanFailureLabel.as_tuple().0778125, dual LGTM, P0=0 P1=0, CI green) — docs/script/tests only; nosrc/, no BigQuery write. docs(evalbench): consolidate native import and span-G1 walkthroughs #468 stays presenter-only.The gap
Phase 2 localization currently exists as a library, not as snapshot data. #467 already emits the RFC shape
(trace_id, span_id, failure_category, evidence, confidence)for the widget-stock silence session — inspectable in Python tests and a--fixturepresenter, but not part of the BQAA-owned snapshot contract. Session-level G1 is queryable viafailed_sessions; span labels are not.Do not reimplement
span_taxonomyor invent a new taxonomy or a second localizer. The missing piece is publication:NativeAgentEventsRun.materialize(or a thin sibling that inherits it) should write a BQAA-owned span-labels table keyed by the frozen pin(job_id, import_version), joinable tofailed_sessionsvia the frozeneval_idrule.Session-level
failed_sessions+ G1 remains the denominator. Span rows localize; they never classify or replace it.Goal
On a native snapshot of the widget-stock session
7e352c34(full id7e352c34-4c1c-4395-acd5-fb3c8f215346), the published span-labels rows make the AGENT_STARTING silence inspectable as data:span_idb7ad6b7169203331,target_kind="gap_after_span";task/planning,finalization,tool blockers;TOOL_STARTING/check_inventory/AGENT_COMPLETEDoccurred.Source of truth is production ADK
agent_events(native path). The EvalBench adapter (#97,evalbench-import) stays optional; this slice must not require EvalBench sourceconfigs/results/scores.Reuse
label_native_runwith the frozenEvalScorePolicy({"goal_completion": 1.0})— per the #468 P1 finding, the default empty policy dropstask/planning.Acceptance (widget-stock, fixture-testable, no live BigQuery)
7e352c34still yieldstask/planning,finalization,tool blockers— unchanged.gap_after_span, evidence strings) and carry(job_id, import_version)withjob_id=mvp-e2e-real-traces.eval_id = session_id[:8]when unique in the snapshot / join set; fullsession_idon first-8 collision. Span rows must stay joinable to the sameeval_idthatfailed_sessions/ G1 already uses.span_idfail closed.--synth, no live/LLM judge, no productionagent_eventswrites.EvalBenchRun.materialize/NativeAgentEventsRunrather than a parallel publisher. A thin CLI extension ofevalbench-native-importis allowed; do not invent a new command family.Guardrails
agent_events.evalbench-import(Add EvalBench bridge: import EvalBench BigQuery runs into a BQAA-owned mirror table #97).main; stack on feat(evalbench): span-level G1 taxonomy on span_id (#466) #467 heada7fd389.turn_index— it is omitted on purpose in feat(evalbench): span-level G1 taxonomy on span_id (#466) #467 until Promote correction/anti-parroting trace analysis to core (turn tagging + sub_trajectories) #429 exposes an importable full-conversation mapping. Do not fork Promote correction/anti-parroting trace analysis to core (turn tagging + sub_trajectories) #429's coordinate.Out of scope
turn_index(Promote correction/anti-parroting trace analysis to core (turn tagging + sub_trajectories) #429)Related
agent_eventswriter)sub_trajectories; do not fork it)