Skip to content

feat(char): segment axis for rampup/pyramid — cold-start on 2s/6s/LL#691

Merged
jonathaneoliver merged 1 commit into
devfrom
feat/char-2s-segment-axis
Jun 8, 2026
Merged

feat(char): segment axis for rampup/pyramid — cold-start on 2s/6s/LL#691
jonathaneoliver merged 1 commit into
devfrom
feat/char-2s-segment-axis

Conversation

@jonathaneoliver
Copy link
Copy Markdown
Owner

What

Adds a CHAR_SEGMENT={2s|6s|ll} configuration axis to the rampup and pyramid characterization tests, so a single deterministic cold launch lands on the chosen segment length. Pairs with #685 (which made /api/content advertise all available segment lengths so Home isn't empty when 2s is selected).

Changes

  • runner/appium.goSetLaunchArgs passes XCUITest processArguments; iOS folds -is.segment <rawValue> into UserDefaults (NSArgumentDomain, highest precedence) so the player cold-starts on that segment from frame 1 — no UI pre-set, no second Appium session, no warm-switch starvation. ResumePlayback now waits for the home-continue-watching tile (waitForAccessibilityID) instead of racing the async catalogue fetch (which can leave Home empty for a few seconds after a fresh/segment-forced launch).
  • modes/rampup_test.go, modes/pyramid_test.go — read CHAR_SEGMENT (label 2s|6s|ll → enum rawValue s2|s6|ll), force it via the launch arg, assert the cold start landed on the requested master (master_2s/master_6s/master.m3u8) and fail loudly otherwise, label the play segment=<v>, and tag the report filename.
  • PlayerViewModel.setSegment — persist the choice (persistFlags) like every other Advanced setter; it was the lone setter that skipped persistence, so a segment choice silently reverted on relaunch.

Validation

End-to-end on the iPad sim: CHAR_SEGMENT=2s cold-started on master_2s.m3u8 and laddered the full rampup 540p→720p→1080p→4K with zero stalls. (A separate inter-cycle inactivity-timeout issue surfaced for multi-cycle runs — addressed independently.)

🤖 Generated with Claude Code

Adds a CHAR_SEGMENT={2s|6s|ll} configuration axis to the rampup and
pyramid characterization tests so a single deterministic cold launch
lands on the chosen segment length.

- runner/appium.go: SetLaunchArgs lets a test pass XCUITest
  processArguments; iOS folds `-is.segment <rawValue>` into UserDefaults
  (NSArgumentDomain, highest precedence) so the player cold-starts on
  that segment from frame 1 — no UI pre-set, no second Appium session,
  no warm-switch starvation. ResumePlayback now waits for the
  home-continue-watching tile (waitForAccessibilityID) instead of
  racing the async catalogue fetch, which can leave Home empty for a
  few seconds after a fresh/segment-forced launch.
- modes/rampup_test.go, modes/pyramid_test.go: read CHAR_SEGMENT
  (label form 2s|6s|ll → enum rawValue s2|s6|ll), force it via the
  launch arg, assert the cold start actually landed on the requested
  master (master_2s/master_6s/master.m3u8) and fail loudly otherwise,
  label the play with segment=<v>, and tag the report filename.
- PlayerViewModel.setSegment: persist the choice (persistFlags) like
  every other Advanced setter — it was the lone setter that skipped
  persistence, so the segment silently reverted on relaunch. The
  relaunch-per-segment cold start depends on it surviving the launch.

Validated end-to-end on the iPad sim: CHAR_SEGMENT=2s cold-starts on
master_2s.m3u8 and laddered the full rampup 540p→720p→1080p→4K with
zero stalls (paired with the #685 catalogue fix that lets Home show
content when 2s is selected).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the enhancement New feature or request label Jun 8, 2026
@jonathaneoliver jonathaneoliver merged commit 6490db7 into dev Jun 8, 2026
1 check passed
@jonathaneoliver jonathaneoliver deleted the feat/char-2s-segment-axis branch June 8, 2026 00:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant