test(smoke): add T+/wall timer overlay to smoke page for D-13 stale-gap measurement
The smoke test page now displays a fixed top-right overlay showing elapsed-since-load (T+) and wall-clock (HH:MM:SS). Operator can: - Note timer values at save-click moment - Examine the saved WebM's last frame for the visible timer values - Compute (save-click value − last-frame value) = operator-visible "stale gap" the D-13 architecture leaks This converts the subjective "video isn't latest" observation into a precise measurement, enabling correct routing: - Gap ≤ 10s → matches D-13 in-flight-segment trade-off (architectural, not a regression; would inform a follow-up plan to reduce the gap) - Gap > 10s → real regression (ring buffer rotation broken or similar) Pure diagnostic addition to smoke.sh; no extension code changed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
42
smoke.sh
42
smoke.sh
@@ -105,8 +105,28 @@ fi
|
|||||||
# --- compose the smoke tab data URL ---
|
# --- compose the smoke tab data URL ---
|
||||||
read -r -d '' SMOKE_HTML <<'EOF' || true
|
read -r -d '' SMOKE_HTML <<'EOF' || true
|
||||||
<title>Mokosh Smoke Test</title>
|
<title>Mokosh Smoke Test</title>
|
||||||
<style>body{font-family:sans-serif;background:#222;color:#eee;padding:40px;line-height:1.5}code{background:#444;padding:2px 6px;border-radius:3px}ol li{margin:6px 0}.flash{animation:flash 1s infinite;background:#0a4;padding:4px 8px;display:inline-block}@keyframes flash{0%,100%{opacity:1}50%{opacity:.4}}</style>
|
<style>
|
||||||
|
body{font-family:sans-serif;background:#222;color:#eee;padding:40px;line-height:1.5}
|
||||||
|
code{background:#444;padding:2px 6px;border-radius:3px}
|
||||||
|
ol li{margin:6px 0}
|
||||||
|
.flash{animation:flash 1s infinite;background:#0a4;padding:4px 8px;display:inline-block}
|
||||||
|
@keyframes flash{0%,100%{opacity:1}50%{opacity:.4}}
|
||||||
|
/* Diagnostic timer overlay — high-contrast monospace pinned top-right so it appears in every
|
||||||
|
recorded frame. T+ counts seconds since page load (matches the moment Mokosh starts recording);
|
||||||
|
wall is HH:MM:SS local time for cross-referencing with SW console logs. The visible value
|
||||||
|
in the last frame of the saved video minus the value at save-click time = the operator-visible
|
||||||
|
"stale gap" the D-13 architecture leaks. */
|
||||||
|
#mokosh-timer{position:fixed;top:12px;right:12px;background:#000;color:#0f0;padding:10px 16px;
|
||||||
|
border:2px solid #0f0;border-radius:6px;font-family:'Courier New',monospace;font-size:28px;
|
||||||
|
font-weight:bold;line-height:1.15;text-align:right;z-index:9999;box-shadow:0 2px 8px rgba(0,0,0,.6)}
|
||||||
|
#mokosh-timer .lbl{font-size:11px;color:#0a0;letter-spacing:.05em}
|
||||||
|
#mokosh-timer .val{font-variant-numeric:tabular-nums}
|
||||||
|
</style>
|
||||||
<body>
|
<body>
|
||||||
|
<div id="mokosh-timer">
|
||||||
|
<div><span class="lbl">T+</span> <span class="val" id="t-elapsed">0.0s</span></div>
|
||||||
|
<div><span class="lbl">wall</span> <span class="val" id="t-wall">--:--:--</span></div>
|
||||||
|
</div>
|
||||||
<h1>🧵 Mokosh Smoke Test</h1>
|
<h1>🧵 Mokosh Smoke Test</h1>
|
||||||
<p>This tab is the share-screen target. The picker auto-accepts because the title matches <code>--auto-select-desktop-capture-source</code>.</p>
|
<p>This tab is the share-screen target. The picker auto-accepts because the title matches <code>--auto-select-desktop-capture-source</code>.</p>
|
||||||
<h2>Steps:</h2>
|
<h2>Steps:</h2>
|
||||||
@@ -114,10 +134,26 @@ read -r -d '' SMOKE_HTML <<'EOF' || true
|
|||||||
<li><strong class="flash">First time only:</strong> Go to <code>chrome://extensions</code> → toggle <strong>Developer mode</strong> ON → <strong>Load unpacked</strong> → select <code>/home/parf/projects/work/repremium/dist</code>.<br>(Set <code>KEEP_PROFILE=1</code> when re-running this script to skip the reload.)</li>
|
<li><strong class="flash">First time only:</strong> Go to <code>chrome://extensions</code> → toggle <strong>Developer mode</strong> ON → <strong>Load unpacked</strong> → select <code>/home/parf/projects/work/repremium/dist</code>.<br>(Set <code>KEEP_PROFILE=1</code> when re-running this script to skip the reload.)</li>
|
||||||
<li>Click the <strong>AI Call Recorder</strong> toolbar icon (or puzzle-piece menu).</li>
|
<li>Click the <strong>AI Call Recorder</strong> toolbar icon (or puzzle-piece menu).</li>
|
||||||
<li>The picker auto-accepts <em>this tab</em>. Confirm Chrome's "Sharing your screen" indicator appears.</li>
|
<li>The picker auto-accepts <em>this tab</em>. Confirm Chrome's "Sharing your screen" indicator appears.</li>
|
||||||
<li>Wait <strong>≥ 35 seconds</strong>. Move the mouse around or scroll this page so vp9 has frame deltas.</li>
|
<li>Wait <strong>≥ 35 seconds</strong>. <em>Note the timer value in the corner</em>. Move the mouse around or scroll this page so vp9 has frame deltas.</li>
|
||||||
<li>Click the toolbar icon again → click <strong>Сохранить отчёт об ошибке</strong>.</li>
|
<li>Click the toolbar icon again → click <strong>Сохранить отчёт об ошибке</strong>. <em>Note T+ and wall at the moment you click — compare to the LAST visible timer values in the saved video. Gap = operator-visible "stale" window.</em></li>
|
||||||
</ol>
|
</ol>
|
||||||
<p>The script in your terminal will detect the download and finish the ffprobe gate automatically.</p>
|
<p>The script in your terminal will detect the download and finish the ffprobe gate automatically.</p>
|
||||||
|
<script>
|
||||||
|
(function(){
|
||||||
|
var t0 = performance.now();
|
||||||
|
var el = document.getElementById('t-elapsed');
|
||||||
|
var wallEl = document.getElementById('t-wall');
|
||||||
|
function pad(n){return String(n).padStart(2,'0');}
|
||||||
|
function tick(){
|
||||||
|
var dt = (performance.now() - t0) / 1000;
|
||||||
|
el.textContent = dt.toFixed(1) + 's';
|
||||||
|
var now = new Date();
|
||||||
|
wallEl.textContent = pad(now.getHours()) + ':' + pad(now.getMinutes()) + ':' + pad(now.getSeconds());
|
||||||
|
}
|
||||||
|
tick();
|
||||||
|
setInterval(tick, 100);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
EOF
|
EOF
|
||||||
# WR-04 fix: python3 is required (asserted in pre-flight). NO fallback —
|
# WR-04 fix: python3 is required (asserted in pre-flight). NO fallback —
|
||||||
|
|||||||
Reference in New Issue
Block a user