Skip to content

feat(knowledge): data-fields.md Phase 3 — characterization report shapes #514

@jonathaneoliver

Description

@jonathaneoliver

Why

Phase 1 of .claude/standards/data-fields.md (issue #512) covers session_events, network_requests, control_events, plays summary, and label vocabulary — enough for typical play-level investigations. Characterization-test investigations need more: the per-test report shapes (runner.Report, Step, StartupCycleResult, AbortCycleResult, RetryCycleResult, variant_activity, Summary) drive the analysis but aren't field-documented in one place yet.

Today, .claude/standards/*-characterization-test.md (startup, abort) cover their own test mode's fields well, but there's no cross-cutting reference for the shared types (the per-Step envelope, the variant_activity[] shape that appears across modes, the Summary aggregate).

What

Extend .claude/standards/data-fields.md with §6 — characterization report shapes. Same format as Phases 1+2 (entry per field: name, type, units, populated, meaning, gotchas, see).

Cover:

  • runner.Report top-level (mode, platform, device, player_id, play_ids, started_at, ended_at, variants, steps, samples, summary, abort_cycles, startup_cycles, retry_cycles)
  • Step (per-step envelope used by smooth/steps/pyramid/rampup/rampdown)
  • StartupCycleResult (cold-start / channel-change observations)
  • AbortCycleResult (abort behavior observations)
  • RetryCycleResult (persistent-fault retry observations)
  • variant_activity[] (per-variant fetch tracking — playlist_fetches, segment_fetches, first/last_segment_at_s, active_duration_s, peeked_but_never_used, avg/peak_mbps)
  • Summary (per-run aggregates)
  • Sample (per-sample telemetry: video_resolution, network_bitrate_mbps, buffer_depth_s, etc.)

Cross-reference (don't duplicate) the per-test standards docs ([[startup-characterization-test]], [[abort-characterization-test]], [[retry-backoff-characterization-test]], [[characterization-principles]]).

Acceptance

  • §6 of data-fields.md is no longer a stub; covers the shapes above with entry-per-field format.
  • Bot can explain variant_activity[i].peeked_but_never_used without inferring from raw JSON.

Out of scope

  • Auto-generation from Go struct tags. Tempting but the prose semantics (e.g. "first_variant_picked is the first variant playlist the player fetched — NOT the first variant whose frames actually rendered, which is variant_at_5s") are the value, and those aren't in the struct tags.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions