Online ResourcesPrashant Chaudhary

Do Open-Source Video Ad Clients Follow VAST 4.3? An Empirical Study of Player Conformance

Online Resource 3: Shaka Player 5.3.0 compared with 5.2.12

Online Resource 3 to "Do Open-Source Video Ad Clients Follow VAST 4.3? An Empirical Study of Player Conformance" (Prashant Chaudhary, October 2026). Shaka Player 5.3.0 was published on 2026-10-16, the day of the reference runs, and rewrites the library's ad tracking. The paper's tables report Shaka Player 5.2.12, the release graded in every engine and on both platforms; Section 5.1.3 adds a short passage on 5.3.0. This document is the full record of the 5.3.0 run: the version tested, how it was run, the verdict totals, every verdict change with its cause in the 5.3.0 source, the verdicts that stayed the same but changed on the wire, the rechecks, and which findings of the paper still hold. Paths are relative to the root of the replication repository. The verdicts and counts below are computed from results.jsonl of the archive's Shaka 5.3.0 results (the 5.3.0 run) against chromium/results.jsonl in the archive's reference results (5.2.12); the causes in the 5.3.0 source and the version record are copied from COMPARE.md, stored with the independent 5.3.0 run in the archive unless another file is named. README.md of the archive's Shaka 5.3.0 results, summary.json and matrix.tsv describe the run.

1. Version tested and how it was run

2. Verdict totals (108 cells)

Computed from the two results.jsonl files; strengths from code/harness/suite/requirements.mjs.

Table R3.1. Verdict totals (108 cells)

showing 2 of 2CSV
5.2.123529 (21 must, 8 should)44
5.3.04422 (15 must, 7 should)42

11 verdict changes (7 must, 4 should); 97 cells unchanged. By direction: eight cells go from deviates to conforms (M01, M02, M03, M06, M11, P03 must; T10, T23 should), two from n/a to conforms (M04 must, M08 should), and one from conforms to deviates (M05 should). No cell goes to n/a and none from conforms to n/a. That gives 29 - 8 + 1 = 22 deviating cells, 35 + 8 + 2 - 1 = 44 conforming cells and 44 - 2 = 42 n/a cells, as in the totals. These are the totals of paper Table 5.

3. Every verdict change, with its cause

Line numbers refer to node_modules/shaka-player/lib/ads/ in 5.3.0: S = interstitial_ad_session.js, M = interstitial_ad_manager.js (COMPARE.md). Details are the oracle's text in the two runs.

Table R3.2. Every verdict change, with its cause

showing 11 of 11CSV
M01mustdeviates: "[CACHEBUSTING]" (14 chars)conforms: 67359395Tracking URIs pass through session.expandUri() (M 716, S 274-299). CACHEBUSTING is 8 random digits with leading zeros kept (S 283-285).fix
M02mustdeviates: "[TIMESTAMP]"conforms: 2026-10-22T03:08:59.600ZTIMESTAMP = new Date().toISOString() (S 287)fix
M03mustdeviates: "[LIMITADTRACKING]"conforms: -1 (unknown/withheld; outside the 0/1 definition)LIMITADTRACKING is not in the macro table, so the fallback writes -1 (S 298). This conforms only under the harness's lenient -1/-2 acceptance. It is not a 0/1 value.fix (lenient)
M04mustn/a: TIMESTAMP left unreplaced (see M02)conforms: 2026-10-22T03%3A08%3A59.600ZValues are passed through encodeURIComponent (S 297-298). The cell becomes gradable once M02 conforms.fix
M05shouldconforms: "[NOTAREALMACRO]"deviates: replaced with -1Every bracketed token that is not in the table is replaced with -1: the pattern is /\[([A-Z0-9_]+)\]|%5B...%5D/gi with || '-1' (S 296-298). Section 6.1 of the specification says to leave unknown macros alone. The same fallback writes -1 for [ERRORCODE] (see E03, E05, E06 in section 4).regression
M06mustdeviates: not replaced or implausible: ah="[ADPLAYHEAD]", asi="[ADSERVINGID]", ...conforms: all replacedThe optional macros of the vector are filled or set to -1 by the same macro table and fallback (S 284-298).fix
M08shouldn/a: left as macro (see M06)conforms: 00:00:05.235ADPLAYHEAD is filled from the session's ad-time clock (S 274-299). The cell becomes gradable once M06 conforms.fix
M11mustdeviates: cb "[CACHEBUSTING]", ts "[TIMESTAMP]"conforms: cb 21397432, ts 2026-10-22T03:15:22.608ZError URIs go through the same sendBeacon and expandUri path (M 716-722)fix
P03mustdeviates: misattributed: p1 imp 1 complete 0; p2 imp 1 complete 1; p3 imp 1 complete 2conforms: one impression and one complete per ad (3 ads)complete() sends AD_COMPLETE for its own interstitial before basicTask() sets up the next ad (M 1455-1466). Each ad also gets its own session and tracker (M 710-725; the header of S reads: "a callback from an earlier ad cannot track the next ad in a pod"). In 5.2.12, complete fired after the next ad became lastPlayedAd_. On the wire, each pod ad gets its own complete.fix
T10shoulddeviates: impression requested for an ad that never playedconforms: no impressionImpression, start and loaded beacons are held back until the session sees real playback: readyState >= 2 and a timeupdate (S 149-167). notify() drops anything other than loaded or error before that point (S 225). In 5.2.12 they fired at ad setup, before media load.fix
T23shoulddeviates: unmute fired 2 timesconforms: unmute onceA volumechange that does not change the muted state is tagged muteChanged=false (M 1581-1587) and not tracked (M 2335-2337, S 235-239). In 5.2.12, every non-muted volumechange fired unmute (5.2.12 ad_utils.js 161).fix

Counting check: the 10 fixes are M01, M02, M03, M04, M06, M08, M11, P03, T10 and T23 (7 must: M01, M02, M03, M04, M06, M11, P03; 3 should: M08, T10, T23). The regression is M05 (should).

4. Same verdict, different wire

Source: COMPARE.md, "Same verdict, different wire".

5. Findings that did not change in 5.3.0

Source: COMPARE.md, "Unchanged findings (5.3.0 source)". All of these still hold, each with the same verdict as 5.2.12; the 97 unchanged cells include them (W01, W02, E01, E02, E07, T05 to T07, T18, T20, T21, S01, P01, P05, I01, I03, A01).

6. Rechecks

Source: COMPARE.md, "Rechecks", for the independent run (stored in the archive), and README.md of the archive's Shaka 5.3.0 results.

7. Which findings of the paper hold on 5.3.0

Source: COMPARE.md, "Do the paper's Shaka findings hold on 5.3.0?". Section 5.1.3 and the conclusion (Section 8) describe 5.2.12 correctly. On 5.3.0:

8. How the paper treats the run