[object Object]

← back to Cronjobs Viewer

add cross-browser cron viewer proof

dc5aa61cec65f7a493b90ef4ccda3dd744aebbfb · 2026-08-30 11:05:01 -0700 · Steve

Files touched

Diff

commit dc5aa61cec65f7a493b90ef4ccda3dd744aebbfb
Author: Steve <steve@designerwallcoverings.com>
Date:   Sun Aug 30 11:05:01 2026 -0700

    add cross-browser cron viewer proof
---
 scripts/cycle2-cta.js                              |  93 ++++++
 scripts/cycle2-screenrecord.js                     |  88 ++++++
 verification/cycle2-cta/CTA-REPORT.md              |  20 +-
 .../page@3e51e37ada3b0f5e07c2f5e10ddc925c.webm     | Bin 0 -> 2992633 bytes
 .../page@466b50c4d21394fc6a3d2ec3837f7833.webm     | Bin 0 -> 983771 bytes
 .../page@ae3491d8bd127800767ffccd46d643e2.webm     |   0
 .../page@f2abcf022f6174e603265a66931b371b.webm     | Bin 0 -> 937216 bytes
 .../page@10bb887bfa377b95770ea1f0d51db0d1.webm     | Bin 0 -> 1286701 bytes
 .../page@139acc3c835474c0e2ebaf32cb8f8151.webm     | Bin 0 -> 2759950 bytes
 .../page@2d63750149bb02fa2c178888fb7c03e7.webm     | Bin 0 -> 1176520 bytes
 .../cycle2-cta/shots/chromium/alert-filter.png     | Bin 83970 -> 80898 bytes
 .../cycle2-cta/shots/chromium/error-filter.png     | Bin 136283 -> 126956 bytes
 verification/cycle2-cta/shots/chromium/final.png   | Bin 4885022 -> 4626539 bytes
 .../cycle2-cta/shots/webkit/alert-filter.png       | Bin 115741 -> 111686 bytes
 .../cycle2-cta/shots/webkit/error-filter.png       | Bin 150605 -> 145959 bytes
 verification/cycle2-cta/shots/webkit/final.png     | Bin 5915063 -> 5587142 bytes
 verification/cycle2-screenrecord/DEBUG-REPORT.md   |  12 +-
 verification/cycle2-screenrecord/debug-log.jsonl   | 320 +++++++++++++++++++++
 .../page@214c0413bb73af974f321eff6f0119f6.webm     | Bin 0 -> 921503 bytes
 .../page@7bc6e12df864c8d722ab20470c435a88.webm     | Bin 0 -> 933063 bytes
 .../page@8d6730028a5fd3fab1071f6aa857ee56.webm     | Bin 0 -> 829313 bytes
 .../page@a539bab3f3f41ee42785ef0bc0f51f58.webm     | Bin 0 -> 820856 bytes
 .../page@120b004431ab0af56a4c7508247e4a7e.webm     | Bin 0 -> 879286 bytes
 .../page@3248b2dfa75aff227b040a28fe3da0a3.webm     | Bin 0 -> 873326 bytes
 .../page@76f3b1723988c3209df5522f38a80207.webm     | Bin 0 -> 915157 bytes
 .../page@ae853584b727e4f463e5c432c2b7dc85.webm     | Bin 0 -> 910558 bytes
 .../page@65830278ac299805d863d04a77493122.webm     | Bin 0 -> 946631 bytes
 .../page@da2e3232089c5f44c8c2d46156b02295.webm     | Bin 0 -> 850791 bytes
 28 files changed, 516 insertions(+), 17 deletions(-)

diff --git a/scripts/cycle2-cta.js b/scripts/cycle2-cta.js
new file mode 100644
index 0000000..473b30e
--- /dev/null
+++ b/scripts/cycle2-cta.js
@@ -0,0 +1,93 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const path = require('path');
+const { chromium, webkit } = require('playwright');
+
+const PROJECT = path.resolve(__dirname, '..');
+const URL = process.env.CJV_TEST_URL || 'http://127.0.0.1:19772/';
+const ROOT = path.join(PROJECT, 'verification', 'cycle2-cta');
+const AUTH = { username: process.env.CJV_USER || 'admin', password: process.env.CJV_PASS || 'DW2024!' };
+fs.mkdirSync(path.join(ROOT, 'shots'), { recursive: true });
+fs.mkdirSync(path.join(ROOT, 'rec'), { recursive: true });
+const results = [];
+
+async function check(page, engine, label, action, assertion) {
+  const before = page.__errors.length;
+  let ok = true, detail = '';
+  try {
+    await action();
+    await page.waitForTimeout(100);
+    ok = !!(await assertion());
+    if (!ok) detail = 'assertion returned false';
+  } catch (error) { ok = false; detail = error.message; }
+  const errors = page.__errors.slice(before);
+  results.push({ engine, label, ok: ok && !errors.length, detail, errors });
+}
+
+async function run(engine, browserType) {
+  const browser = await browserType.launch({ headless: true });
+  const recDir = path.join(ROOT, 'rec', engine);
+  const shotDir = path.join(ROOT, 'shots', engine);
+  fs.mkdirSync(recDir, { recursive: true }); fs.mkdirSync(shotDir, { recursive: true });
+  const ctx = await browser.newContext({ viewport: { width: 1440, height: 1000 }, httpCredentials: AUTH, recordVideo: { dir: recDir, size: { width: 1440, height: 1000 } } });
+  const page = await ctx.newPage();
+  page.__errors = [];
+  page.on('console', m => m.type() === 'error' && page.__errors.push(`console: ${m.text()}`));
+  page.on('pageerror', e => page.__errors.push(`pageerror: ${e.message}`));
+  page.on('response', r => r.status() >= 400 && page.__errors.push(`HTTP ${r.status()}: ${r.url()}`));
+  await page.goto(URL, { waitUntil: 'domcontentloaded' });
+  await page.waitForFunction(() => document.querySelectorAll('.card').length > 0, null, { timeout: 30000 });
+  const api = await page.evaluate(() => fetch('api/crons', { credentials: 'same-origin' }).then(r => r.json()));
+  const alerts = api.jobs.filter(x => x.state === 'alert'), errors = api.jobs.filter(x => x.state === 'error');
+  await check(page, engine, 'alert/error source data', async () => {}, () => alerts.length > 0 && errors.length > 0);
+
+  for (const value of ['state','stale','label','runs','nextRun','lastLog','schedule','exit','created']) {
+    await check(page, engine, `sort ${value}`, () => page.locator('#sort').selectOption(value), async () => (await page.locator('#sort').inputValue()) === value && (await page.locator('.card').count()) > 0);
+  }
+  await check(page, engine, 'Alert filter', () => page.locator('#fstate').selectOption('alert'), async () => (await page.locator('.card').count()) === alerts.length && (await page.locator('.card:not(.alert)').count()) === 0);
+  await page.screenshot({ path: path.join(shotDir, 'alert-filter.png'), fullPage: true });
+  await check(page, engine, 'Alert badge rendered', async () => {}, async () => (await page.locator('.badge.alert').count()) === alerts.length && !(await page.locator('.card.alert .drill').first().textContent()).includes('<span'));
+  await check(page, engine, 'State drill link', () => page.locator('.card.alert .drill').first().click(), () => page.evaluate(() => new URL(location.href).searchParams.get('state') === 'alert'));
+  await page.goto(URL, { waitUntil: 'domcontentloaded' }); await page.waitForFunction(() => document.querySelectorAll('.card').length > 0);
+  await check(page, engine, 'Error filter', () => page.locator('#fstate').selectOption('error'), async () => (await page.locator('.card').count()) === errors.length && (await page.locator('.card:not(.error)').count()) === 0);
+  await page.screenshot({ path: path.join(shotDir, 'error-filter.png'), fullPage: true });
+  await check(page, engine, 'Error badges rendered', async () => {}, async () => (await page.locator('.badge.error').count()) === errors.length && !(await page.locator('.card.error .drill').first().textContent()).includes('<span'));
+  await check(page, engine, 'All states', () => page.locator('#fstate').selectOption(''), async () => (await page.locator('.card').count()) === api.jobs.length);
+
+  await check(page, engine, 'Failing only', () => page.locator('#failonly').check(), async () => (await page.locator('.card').count()) === alerts.length + errors.length && (await page.locator('.card:not(.alert):not(.error)').count()) === 0);
+  await check(page, engine, 'Failing only off', () => page.locator('#failonly').uncheck(), async () => (await page.locator('.card').count()) === api.jobs.length);
+
+  const query = (alerts[0] || errors[0]).label.replace(/^com\.steve\./, '').slice(0, 12);
+  await check(page, engine, 'Search', () => page.locator('#q').fill(query), async () => (await page.locator('.card').count()) > 0 && (await page.locator('.card').allTextContents()).every(x => x.toLowerCase().includes(query.toLowerCase())));
+  await page.locator('#q').fill('');
+
+  for (const value of ['','firing','stale','unknown']) await check(page, engine, `liveness ${value || 'all'}`, () => page.locator('#flive').selectOption(value), async () => (await page.locator('#flive').inputValue()) === value);
+  await page.locator('#flive').selectOption('');
+  for (const value of ['','daily','every','at load']) await check(page, engine, `cadence ${value || 'all'}`, () => page.locator('#fcad').selectOption(value), async () => (await page.locator('#fcad').inputValue()) === value);
+  await page.locator('#fcad').selectOption('');
+
+  for (const value of ['1','6','4']) await check(page, engine, `density ${value}`, () => page.locator('#density').fill(value), () => page.evaluate(v => getComputedStyle(document.documentElement).getPropertyValue('--cols').trim() === v, value));
+  await check(page, engine, 'Auto-refresh off', () => page.locator('#auto').uncheck(), async () => !(await page.locator('#auto').isChecked()));
+  await check(page, engine, 'Auto-refresh on', () => page.locator('#auto').check(), async () => await page.locator('#auto').isChecked());
+
+  await page.goto(URL, { waitUntil: 'domcontentloaded' }); await page.waitForFunction(() => document.querySelectorAll('.card').length > 0);
+  await check(page, engine, 'Liveness pill re-check', async () => { const p = page.locator('.live').first(); await p.click(); await page.waitForFunction(() => !document.querySelector('.live[data-busy]'), null, { timeout: 15000 }); }, async () => /firing|stale|unknown|running now/.test(await page.locator('.live').first().textContent()));
+  await page.screenshot({ path: path.join(shotDir, 'final.png'), fullPage: true });
+
+  const video = page.video(); await ctx.close(); const videoPath = video ? await video.path() : ''; await browser.close();
+  return { videoPath, alerts: alerts.length, errors: errors.length, jobs: api.jobs.length };
+}
+
+(async () => {
+  const coverage = {};
+  for (const [name, type] of [['chromium', chromium], ['webkit', webkit]]) coverage[name] = await run(name, type);
+  const bad = results.filter(x => !x.ok);
+  const report = ['# Cycle 2 CTA — cronjobs viewer', '', `**Verdict:** ${bad.length ? 'FAIL' : 'PASS'} — ${results.length - bad.length}/${results.length} checks clean.`, '',
+    `Source data: ${coverage.chromium.jobs} jobs; ${coverage.chromium.alerts} alert; ${coverage.chromium.errors} error.`, '',
+    '**Browserbase:** SKIP — localhost is not exposed to the cloud, and exposing it is outside the gate.', '',
+    `- Chromium recording: ${coverage.chromium.videoPath}`, `- WebKit recording: ${coverage.webkit.videoPath}`, '',
+    '| Engine | Control | Result | Detail |', '|---|---|---:|---|', ...results.map(x => `| ${x.engine} | ${x.label} | ${x.ok ? 'PASS' : 'FAIL'} | ${(x.errors.join('; ') || x.detail || '—').replace(/\|/g,'\\|')} |`), ''];
+  fs.writeFileSync(path.join(ROOT, 'CTA-REPORT.md'), report.join('\n'));
+  console.log(JSON.stringify({ verdict: bad.length ? 'FAIL' : 'PASS', checks: results.length, failures: bad.length, report: path.join(ROOT, 'CTA-REPORT.md') }));
+  if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/cycle2-screenrecord.js b/scripts/cycle2-screenrecord.js
new file mode 100644
index 0000000..12818c4
--- /dev/null
+++ b/scripts/cycle2-screenrecord.js
@@ -0,0 +1,88 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const path = require('path');
+const { chromium } = require('playwright');
+
+const PROJECT = path.resolve(__dirname, '..');
+const URL = process.env.CJV_TEST_URL || 'http://127.0.0.1:19772/';
+const ROOT = path.join(PROJECT, 'verification', 'cycle2-screenrecord');
+const LOG = path.join(ROOT, 'debug-log.jsonl');
+const AUTH = { username: process.env.CJV_USER || 'admin', password: process.env.CJV_PASS || 'DW2024!' };
+fs.mkdirSync(path.join(ROOT, 'rec'), { recursive: true });
+const prior = fs.existsSync(LOG) ? fs.readFileSync(LOG, 'utf8').trim().split('\n').filter(Boolean).map(JSON.parse) : [];
+const priorBad = new Set(prior.filter(x => !x.ok || (x.errors || []).length).map(x => x.label));
+const current = [];
+const append = row => { current.push(row); fs.appendFileSync(LOG, JSON.stringify(row) + '\n'); };
+
+async function act(page, run, label, action, assertion) {
+  const before = page.__errors.length;
+  let ok = true, effect = 'expected state observed';
+  try { await action(); await page.waitForTimeout(80); ok = !!(await assertion()); if (!ok) effect = 'assertion returned false'; }
+  catch (error) { ok = false; effect = error.message; }
+  const errors = page.__errors.splice(before);
+  append({ run, ts: new Date().toISOString(), label, ok: ok && !errors.length, effect, errors });
+}
+
+async function run(run) {
+  const browser = await chromium.launch({ headless: true });
+  const dir = path.join(ROOT, 'rec', `run${run}`); fs.mkdirSync(dir, { recursive: true });
+  const ctx = await browser.newContext({ viewport: { width: 1440, height: 1000 }, httpCredentials: AUTH, recordVideo: { dir, size: { width: 1440, height: 1000 } } });
+  const page = await ctx.newPage(); page.__errors = [];
+  page.on('console', m => m.type() === 'error' && page.__errors.push(`console: ${m.text()}`));
+  page.on('pageerror', e => page.__errors.push(`pageerror: ${e.message}`));
+  page.on('response', r => r.status() >= 400 && page.__errors.push(`HTTP ${r.status()}: ${r.url()}`));
+  await page.goto(URL, { waitUntil: 'domcontentloaded' }); await page.waitForFunction(() => document.querySelectorAll('.card').length > 0);
+  const data = await page.evaluate(() => fetch('api/crons', { credentials: 'same-origin' }).then(r => r.json()));
+  const alerts = data.jobs.filter(x => x.state === 'alert').length, errors = data.jobs.filter(x => x.state === 'error').length;
+  if (run === 4 && priorBad.size) append({ run, ts: new Date().toISOString(), label: 'prior failures first', ok: true, effect: [...priorBad].join(', '), errors: [] });
+
+  const groups = {
+    filters: async () => {
+      await act(page, run, 'Alert filter', () => page.locator('#fstate').selectOption('alert'), async () => (await page.locator('.card.alert').count()) === alerts && (await page.locator('.card:not(.alert)').count()) === 0);
+      await act(page, run, 'State drill link', () => page.locator('.card.alert .drill').first().click(), () => page.evaluate(() => new URL(location.href).searchParams.get('state') === 'alert'));
+      await act(page, run, 'Error filter', () => page.locator('#fstate').selectOption('error'), async () => (await page.locator('.card.error').count()) === errors && (await page.locator('.card:not(.error)').count()) === 0);
+      await act(page, run, 'All states', () => page.locator('#fstate').selectOption(''), async () => (await page.locator('.card').count()) === data.jobs.length);
+      await act(page, run, 'Failing only', () => page.locator('#failonly').check(), async () => (await page.locator('.card').count()) === alerts + errors);
+      await act(page, run, 'Failing off', () => page.locator('#failonly').uncheck(), async () => (await page.locator('.card').count()) === data.jobs.length);
+    },
+    search: async () => {
+      const q = data.jobs.find(x => x.state === 'alert' || x.state === 'error').label.replace(/^com\.steve\./,'').slice(0,10);
+      await act(page, run, 'Search', () => page.locator('#q').fill(q), async () => (await page.locator('.card').count()) > 0);
+      await act(page, run, 'Clear search', () => page.locator('#q').fill(''), async () => (await page.locator('.card').count()) === data.jobs.length);
+    },
+    sort: async () => { for (const v of ['state','stale','label','runs','nextRun','lastLog','schedule','exit','created']) await act(page, run, `Sort ${v}`, () => page.locator('#sort').selectOption(v), async () => (await page.locator('#sort').inputValue()) === v); },
+    density: async () => { for (const v of run % 2 ? ['6','1','4'] : ['1','6','4']) await act(page, run, `Density ${v}`, () => page.locator('#density').fill(v), () => page.evaluate(x => getComputedStyle(document.documentElement).getPropertyValue('--cols').trim() === x, v)); },
+    selects: async () => {
+      for (const v of run % 2 ? ['unknown','stale','firing',''] : ['','firing','stale','unknown']) await act(page, run, `Liveness ${v || 'all'}`, () => page.locator('#flive').selectOption(v), async () => (await page.locator('#flive').inputValue()) === v);
+      await page.locator('#flive').selectOption('');
+      for (const v of run % 2 ? ['at load','every','daily',''] : ['','daily','every','at load']) await act(page, run, `Cadence ${v || 'all'}`, () => page.locator('#fcad').selectOption(v), async () => (await page.locator('#fcad').inputValue()) === v);
+      await page.locator('#fcad').selectOption('');
+    },
+    toggles: async () => {
+      await act(page, run, 'Auto off', () => page.locator('#auto').uncheck(), async () => !(await page.locator('#auto').isChecked()));
+      await act(page, run, 'Auto on', () => page.locator('#auto').check(), async () => await page.locator('#auto').isChecked());
+    },
+    liveness: async () => await act(page, run, 'Liveness pill', async () => { const p=page.locator('.live').first(); await p.click(); await page.waitForFunction(() => !document.querySelector('.live[data-busy]'), null, { timeout: 15000 }); }, async () => /firing|stale|unknown|running now/.test(await page.locator('.live').first().textContent()))
+  };
+  const orders = [
+    ['filters','search','sort','density','selects','toggles','liveness'],
+    ['liveness','toggles','selects','density','sort','search','filters'],
+    ['density','filters','sort','liveness','search','toggles','selects'],
+    ['search','selects','liveness','filters','toggles','sort','density'],
+    ['sort','liveness','density','toggles','filters','selects','search']
+  ];
+  for (const name of orders[run]) await groups[name]();
+  append({ run, ts: new Date().toISOString(), label: 'run complete', ok: page.__errors.length === 0, effect: orders[run].join(' → '), errors: page.__errors.splice(0) });
+  const video = page.video(); await ctx.close(); const videoPath = video ? await video.path() : ''; await browser.close(); return { videoPath, order: orders[run] };
+}
+
+(async () => {
+  const runs = []; for (let i=0;i<5;i++) runs.push(await run(i));
+  const bad = current.filter(x => !x.ok || x.errors.length);
+  const report = ['# Cycle 2 five-run screen record — cronjobs viewer', '', `**Verdict:** ${bad.length ? 'FAIL' : 'PASS'} — ${current.length - bad.length}/${current.length} actions clean.`, '',
+    'Persistent append-only memory: `debug-log.jsonl` (read before this run).', '', '## Runs', '',
+    ...runs.map((x,i)=>`- Run ${i}: ${x.order.join(' → ')} — ${x.videoPath}`), '', '## Failures / order-dependent defects', '', bad.length ? bad.map(x=>`- run ${x.run} ${x.label}: ${x.effect}; ${x.errors.join('; ')}`).join('\n') : 'None.', ''];
+  fs.writeFileSync(path.join(ROOT, 'DEBUG-REPORT.md'), report.join('\n'));
+  console.log(JSON.stringify({ verdict: bad.length ? 'FAIL' : 'PASS', runs: 5, actions: current.length, failures: bad.length, report: path.join(ROOT, 'DEBUG-REPORT.md') }));
+  if (bad.length) process.exitCode=1;
+})().catch(e=>{console.error(e);process.exit(1)});
diff --git a/verification/cycle2-cta/CTA-REPORT.md b/verification/cycle2-cta/CTA-REPORT.md
index 3bc081d..1ca2568 100644
--- a/verification/cycle2-cta/CTA-REPORT.md
+++ b/verification/cycle2-cta/CTA-REPORT.md
@@ -1,13 +1,13 @@
 # Cycle 2 CTA — cronjobs viewer
 
-**Verdict:** FAIL — 60/62 checks clean.
+**Verdict:** PASS — 66/66 checks clean.
 
 Source data: 269 jobs; 1 alert; 4 error.
 
 **Browserbase:** SKIP — localhost is not exposed to the cloud, and exposing it is outside the gate.
 
-- Chromium recording: /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-cta/rec/chromium/page@9c29ba3cadd61196c8548218de6ae291.webm
-- WebKit recording: /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-cta/rec/webkit/page@179d53deaf6941c81060d68d83c87f23.webm
+- Chromium recording: /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-cta/rec/chromium/page@466b50c4d21394fc6a3d2ec3837f7833.webm
+- WebKit recording: /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-cta/rec/webkit/page@10bb887bfa377b95770ea1f0d51db0d1.webm
 
 | Engine | Control | Result | Detail |
 |---|---|---:|---|
@@ -22,7 +22,10 @@ Source data: 269 jobs; 1 alert; 4 error.
 | chromium | sort exit | PASS | — |
 | chromium | sort created | PASS | — |
 | chromium | Alert filter | PASS | — |
+| chromium | Alert badge rendered | PASS | — |
+| chromium | State drill link | PASS | — |
 | chromium | Error filter | PASS | — |
+| chromium | Error badges rendered | PASS | — |
 | chromium | All states | PASS | — |
 | chromium | Failing only | PASS | — |
 | chromium | Failing only off | PASS | — |
@@ -40,10 +43,6 @@ Source data: 269 jobs; 1 alert; 4 error.
 | chromium | density 4 | PASS | — |
 | chromium | Auto-refresh off | PASS | — |
 | chromium | Auto-refresh on | PASS | — |
-| chromium | State drill badge | FAIL | locator.click: Timeout 30000ms exceeded.
-Call log:
-  - waiting for locator('.badge.alert').first()
- |
 | chromium | Liveness pill re-check | PASS | — |
 | webkit | alert/error source data | PASS | — |
 | webkit | sort state | PASS | — |
@@ -56,7 +55,10 @@ Call log:
 | webkit | sort exit | PASS | — |
 | webkit | sort created | PASS | — |
 | webkit | Alert filter | PASS | — |
+| webkit | Alert badge rendered | PASS | — |
+| webkit | State drill link | PASS | — |
 | webkit | Error filter | PASS | — |
+| webkit | Error badges rendered | PASS | — |
 | webkit | All states | PASS | — |
 | webkit | Failing only | PASS | — |
 | webkit | Failing only off | PASS | — |
@@ -74,8 +76,4 @@ Call log:
 | webkit | density 4 | PASS | — |
 | webkit | Auto-refresh off | PASS | — |
 | webkit | Auto-refresh on | PASS | — |
-| webkit | State drill badge | FAIL | locator.click: Timeout 30000ms exceeded.
-Call log:
-  - waiting for locator('.badge.alert').first()
- |
 | webkit | Liveness pill re-check | PASS | — |
diff --git a/verification/cycle2-cta/rec/chromium/page@3e51e37ada3b0f5e07c2f5e10ddc925c.webm b/verification/cycle2-cta/rec/chromium/page@3e51e37ada3b0f5e07c2f5e10ddc925c.webm
new file mode 100644
index 0000000..e2a6147
Binary files /dev/null and b/verification/cycle2-cta/rec/chromium/page@3e51e37ada3b0f5e07c2f5e10ddc925c.webm differ
diff --git a/verification/cycle2-cta/rec/chromium/page@466b50c4d21394fc6a3d2ec3837f7833.webm b/verification/cycle2-cta/rec/chromium/page@466b50c4d21394fc6a3d2ec3837f7833.webm
new file mode 100644
index 0000000..ae83e2e
Binary files /dev/null and b/verification/cycle2-cta/rec/chromium/page@466b50c4d21394fc6a3d2ec3837f7833.webm differ
diff --git a/verification/cycle2-cta/rec/chromium/page@ae3491d8bd127800767ffccd46d643e2.webm b/verification/cycle2-cta/rec/chromium/page@ae3491d8bd127800767ffccd46d643e2.webm
new file mode 100644
index 0000000..e69de29
diff --git a/verification/cycle2-cta/rec/chromium/page@f2abcf022f6174e603265a66931b371b.webm b/verification/cycle2-cta/rec/chromium/page@f2abcf022f6174e603265a66931b371b.webm
new file mode 100644
index 0000000..3d7fe7f
Binary files /dev/null and b/verification/cycle2-cta/rec/chromium/page@f2abcf022f6174e603265a66931b371b.webm differ
diff --git a/verification/cycle2-cta/rec/webkit/page@10bb887bfa377b95770ea1f0d51db0d1.webm b/verification/cycle2-cta/rec/webkit/page@10bb887bfa377b95770ea1f0d51db0d1.webm
new file mode 100644
index 0000000..160a786
Binary files /dev/null and b/verification/cycle2-cta/rec/webkit/page@10bb887bfa377b95770ea1f0d51db0d1.webm differ
diff --git a/verification/cycle2-cta/rec/webkit/page@139acc3c835474c0e2ebaf32cb8f8151.webm b/verification/cycle2-cta/rec/webkit/page@139acc3c835474c0e2ebaf32cb8f8151.webm
new file mode 100644
index 0000000..a1e2d89
Binary files /dev/null and b/verification/cycle2-cta/rec/webkit/page@139acc3c835474c0e2ebaf32cb8f8151.webm differ
diff --git a/verification/cycle2-cta/rec/webkit/page@2d63750149bb02fa2c178888fb7c03e7.webm b/verification/cycle2-cta/rec/webkit/page@2d63750149bb02fa2c178888fb7c03e7.webm
new file mode 100644
index 0000000..ef5d505
Binary files /dev/null and b/verification/cycle2-cta/rec/webkit/page@2d63750149bb02fa2c178888fb7c03e7.webm differ
diff --git a/verification/cycle2-cta/shots/chromium/alert-filter.png b/verification/cycle2-cta/shots/chromium/alert-filter.png
index 4566bd4..18ca4f2 100644
Binary files a/verification/cycle2-cta/shots/chromium/alert-filter.png and b/verification/cycle2-cta/shots/chromium/alert-filter.png differ
diff --git a/verification/cycle2-cta/shots/chromium/error-filter.png b/verification/cycle2-cta/shots/chromium/error-filter.png
index 20482ae..3b60237 100644
Binary files a/verification/cycle2-cta/shots/chromium/error-filter.png and b/verification/cycle2-cta/shots/chromium/error-filter.png differ
diff --git a/verification/cycle2-cta/shots/chromium/final.png b/verification/cycle2-cta/shots/chromium/final.png
index 04f89da..9481e78 100644
Binary files a/verification/cycle2-cta/shots/chromium/final.png and b/verification/cycle2-cta/shots/chromium/final.png differ
diff --git a/verification/cycle2-cta/shots/webkit/alert-filter.png b/verification/cycle2-cta/shots/webkit/alert-filter.png
index 9ee5bb8..2b50c55 100644
Binary files a/verification/cycle2-cta/shots/webkit/alert-filter.png and b/verification/cycle2-cta/shots/webkit/alert-filter.png differ
diff --git a/verification/cycle2-cta/shots/webkit/error-filter.png b/verification/cycle2-cta/shots/webkit/error-filter.png
index 18bb48b..c7e4e59 100644
Binary files a/verification/cycle2-cta/shots/webkit/error-filter.png and b/verification/cycle2-cta/shots/webkit/error-filter.png differ
diff --git a/verification/cycle2-cta/shots/webkit/final.png b/verification/cycle2-cta/shots/webkit/final.png
index 99c5fe9..eb52db0 100644
Binary files a/verification/cycle2-cta/shots/webkit/final.png and b/verification/cycle2-cta/shots/webkit/final.png differ
diff --git a/verification/cycle2-screenrecord/DEBUG-REPORT.md b/verification/cycle2-screenrecord/DEBUG-REPORT.md
index 164898e..a1e485f 100644
--- a/verification/cycle2-screenrecord/DEBUG-REPORT.md
+++ b/verification/cycle2-screenrecord/DEBUG-REPORT.md
@@ -1,16 +1,16 @@
 # Cycle 2 five-run screen record — cronjobs viewer
 
-**Verdict:** PASS — 155/155 actions clean.
+**Verdict:** PASS — 160/160 actions clean.
 
 Persistent append-only memory: `debug-log.jsonl` (read before this run).
 
 ## Runs
 
-- Run 0: filters → search → sort → density → selects → toggles → liveness — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run0/page@b0e1072c8fadb0f5d8b0ed84fe6d5a01.webm
-- Run 1: liveness → toggles → selects → density → sort → search → filters — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run1/page@57039210d2fea3afcaf0733dbfdbc712.webm
-- Run 2: density → filters → sort → liveness → search → toggles → selects — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run2/page@178d1c75a07471dc62de31a20088f9f0.webm
-- Run 3: search → selects → liveness → filters → toggles → sort → density — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run3/page@8fbcdb07d2010ba5309f062808a8dbe5.webm
-- Run 4: sort → liveness → density → toggles → filters → selects → search — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run4/page@daeede9eb81e6f7d16aadc47947f1fef.webm
+- Run 0: filters → search → sort → density → selects → toggles → liveness — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run0/page@214c0413bb73af974f321eff6f0119f6.webm
+- Run 1: liveness → toggles → selects → density → sort → search → filters — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run1/page@8d6730028a5fd3fab1071f6aa857ee56.webm
+- Run 2: density → filters → sort → liveness → search → toggles → selects — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run2/page@3248b2dfa75aff227b040a28fe3da0a3.webm
+- Run 3: search → selects → liveness → filters → toggles → sort → density — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run3/page@ae853584b727e4f463e5c432c2b7dc85.webm
+- Run 4: sort → liveness → density → toggles → filters → selects → search — /Users/macstudio3/Projects/cronjobs-viewer/verification/cycle2-screenrecord/rec/run4/page@65830278ac299805d863d04a77493122.webm
 
 ## Failures / order-dependent defects
 
diff --git a/verification/cycle2-screenrecord/debug-log.jsonl b/verification/cycle2-screenrecord/debug-log.jsonl
index 5515fe9..a82088c 100644
--- a/verification/cycle2-screenrecord/debug-log.jsonl
+++ b/verification/cycle2-screenrecord/debug-log.jsonl
@@ -153,3 +153,323 @@
 {"run":4,"ts":"2026-08-30T17:23:24.365Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
 {"run":4,"ts":"2026-08-30T17:23:24.513Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
 {"run":4,"ts":"2026-08-30T17:23:24.513Z","label":"run complete","ok":true,"effect":"sort → liveness → density → toggles → filters → selects → search","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:23.752Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:23.896Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:23.990Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.098Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.204Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.368Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.462Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.618Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.727Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.840Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:24.950Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.062Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.171Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.286Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.399Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.508Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.621Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.706Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.790Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.877Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:25.988Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.077Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.182Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.270Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.446Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.547Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.641Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.729Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:26.896Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:27.001Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:27.120Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:00:27.120Z","label":"run complete","ok":true,"effect":"filters → search → sort → density → selects → toggles → liveness","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:27.796Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:27.892Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.007Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.097Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.201Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.291Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.402Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.574Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.663Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.765Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:28.875Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.033Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.119Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.203Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.312Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.424Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.538Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.647Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.759Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.870Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:29.980Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.089Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.200Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.292Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.439Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.529Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.639Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.732Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.838Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:30.951Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:31.120Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:00:31.121Z","label":"run complete","ok":true,"effect":"liveness → toggles → selects → density → sort → search → filters","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:31.762Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:31.847Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:31.931Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.021Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.128Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.223Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.331Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.438Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.611Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.721Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.836Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:32.946Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.061Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.173Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.282Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.395Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.508Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.618Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.742Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.831Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:33.982Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.085Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.192Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.300Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.390Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.495Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.582Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.751Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.853Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:34.952Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:35.040Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:00:35.063Z","label":"run complete","ok":true,"effect":"density → filters → sort → liveness → search → toggles → selects","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:35.699Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:35.844Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:35.937Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.039Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.127Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.232Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.401Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.490Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.589Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.700Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:36.926Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.014Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.117Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.210Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.316Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.419Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.577Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.691Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.802Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:37.912Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.021Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.131Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.244Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.352Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.461Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.571Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.683Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.793Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.880Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:38.967Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:39.053Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:00:39.053Z","label":"run complete","ok":true,"effect":"search → selects → liveness → filters → toggles → sort → density","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:39.786Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:39.901Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.009Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.124Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.236Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.345Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.459Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.573Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.684Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.837Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:40.922Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.007Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.092Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.185Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.283Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.372Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.478Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.572Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.680Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.784Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:41.945Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.056Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.154Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.258Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.345Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.515Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.617Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.709Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.797Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:42.949Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:43.099Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:00:43.100Z","label":"run complete","ok":true,"effect":"sort → liveness → density → toggles → filters → selects → search","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:10.850Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:10.956Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.048Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.155Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.263Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.426Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.515Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.671Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.781Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:11.896Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.005Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.117Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.227Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.341Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.453Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.563Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.677Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.763Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.848Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:12.936Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.050Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.140Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.243Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.336Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.506Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.607Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.699Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.785Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:13.958Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:14.061Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:14.200Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":0,"ts":"2026-08-30T18:04:14.200Z","label":"run complete","ok":true,"effect":"filters → search → sort → density → selects → toggles → liveness","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:14.917Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.035Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.146Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.237Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.341Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.430Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.536Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.703Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.794Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:15.894Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.005Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.173Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.257Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.342Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.451Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.564Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.673Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.787Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:16.899Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.008Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.120Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.233Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.343Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.439Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.581Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.671Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.769Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.864Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:17.970Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:18.082Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:18.242Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":1,"ts":"2026-08-30T18:04:18.242Z","label":"run complete","ok":true,"effect":"liveness → toggles → selects → density → sort → search → filters","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:18.903Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:18.988Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.073Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.164Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.273Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.367Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.474Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.583Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.744Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.854Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:19.967Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.077Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.191Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.302Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.411Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.524Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.639Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.748Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.871Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:20.962Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.107Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.209Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.310Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.420Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.512Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.617Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.704Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.880Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:21.987Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:22.078Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:22.165Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":2,"ts":"2026-08-30T18:04:22.187Z","label":"run complete","ok":true,"effect":"density → filters → sort → liveness → search → toggles → selects","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:22.807Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:22.954Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.048Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.155Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.244Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.350Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.521Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.610Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.710Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:23.820Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.063Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.153Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.260Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.356Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.463Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.570Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.738Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.834Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:24.940Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.052Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.162Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.274Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.387Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.496Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.606Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.715Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.828Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:25.939Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:26.024Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:26.109Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:26.194Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":3,"ts":"2026-08-30T18:04:26.194Z","label":"run complete","ok":true,"effect":"search → selects → liveness → filters → toggles → sort → density","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:26.834Z","label":"Sort state","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:26.946Z","label":"Sort stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.055Z","label":"Sort label","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.169Z","label":"Sort runs","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.278Z","label":"Sort nextRun","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.388Z","label":"Sort lastLog","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.500Z","label":"Sort schedule","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.610Z","label":"Sort exit","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.719Z","label":"Sort created","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.871Z","label":"Liveness pill","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:27.956Z","label":"Density 1","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.042Z","label":"Density 6","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.128Z","label":"Density 4","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.261Z","label":"Auto off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.363Z","label":"Auto on","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.453Z","label":"Alert filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.555Z","label":"State drill link","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.650Z","label":"Error filter","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.757Z","label":"All states","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:28.862Z","label":"Failing only","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.016Z","label":"Failing off","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.129Z","label":"Liveness all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.218Z","label":"Liveness firing","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.322Z","label":"Liveness stale","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.413Z","label":"Liveness unknown","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.583Z","label":"Cadence all","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.684Z","label":"Cadence daily","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.776Z","label":"Cadence every","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:29.865Z","label":"Cadence at load","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:30.031Z","label":"Search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:30.178Z","label":"Clear search","ok":true,"effect":"expected state observed","errors":[]}
+{"run":4,"ts":"2026-08-30T18:04:30.178Z","label":"run complete","ok":true,"effect":"sort → liveness → density → toggles → filters → selects → search","errors":[]}
diff --git a/verification/cycle2-screenrecord/rec/run0/page@214c0413bb73af974f321eff6f0119f6.webm b/verification/cycle2-screenrecord/rec/run0/page@214c0413bb73af974f321eff6f0119f6.webm
new file mode 100644
index 0000000..e6e6a40
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run0/page@214c0413bb73af974f321eff6f0119f6.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run0/page@7bc6e12df864c8d722ab20470c435a88.webm b/verification/cycle2-screenrecord/rec/run0/page@7bc6e12df864c8d722ab20470c435a88.webm
new file mode 100644
index 0000000..5566791
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run0/page@7bc6e12df864c8d722ab20470c435a88.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run1/page@8d6730028a5fd3fab1071f6aa857ee56.webm b/verification/cycle2-screenrecord/rec/run1/page@8d6730028a5fd3fab1071f6aa857ee56.webm
new file mode 100644
index 0000000..4fd2f1c
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run1/page@8d6730028a5fd3fab1071f6aa857ee56.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run1/page@a539bab3f3f41ee42785ef0bc0f51f58.webm b/verification/cycle2-screenrecord/rec/run1/page@a539bab3f3f41ee42785ef0bc0f51f58.webm
new file mode 100644
index 0000000..c60ce68
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run1/page@a539bab3f3f41ee42785ef0bc0f51f58.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run2/page@120b004431ab0af56a4c7508247e4a7e.webm b/verification/cycle2-screenrecord/rec/run2/page@120b004431ab0af56a4c7508247e4a7e.webm
new file mode 100644
index 0000000..7870a09
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run2/page@120b004431ab0af56a4c7508247e4a7e.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run2/page@3248b2dfa75aff227b040a28fe3da0a3.webm b/verification/cycle2-screenrecord/rec/run2/page@3248b2dfa75aff227b040a28fe3da0a3.webm
new file mode 100644
index 0000000..5ae0068
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run2/page@3248b2dfa75aff227b040a28fe3da0a3.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run3/page@76f3b1723988c3209df5522f38a80207.webm b/verification/cycle2-screenrecord/rec/run3/page@76f3b1723988c3209df5522f38a80207.webm
new file mode 100644
index 0000000..1efef79
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run3/page@76f3b1723988c3209df5522f38a80207.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run3/page@ae853584b727e4f463e5c432c2b7dc85.webm b/verification/cycle2-screenrecord/rec/run3/page@ae853584b727e4f463e5c432c2b7dc85.webm
new file mode 100644
index 0000000..55ee34f
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run3/page@ae853584b727e4f463e5c432c2b7dc85.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run4/page@65830278ac299805d863d04a77493122.webm b/verification/cycle2-screenrecord/rec/run4/page@65830278ac299805d863d04a77493122.webm
new file mode 100644
index 0000000..6625c51
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run4/page@65830278ac299805d863d04a77493122.webm differ
diff --git a/verification/cycle2-screenrecord/rec/run4/page@da2e3232089c5f44c8c2d46156b02295.webm b/verification/cycle2-screenrecord/rec/run4/page@da2e3232089c5f44c8c2d46156b02295.webm
new file mode 100644
index 0000000..5ba1b13
Binary files /dev/null and b/verification/cycle2-screenrecord/rec/run4/page@da2e3232089c5f44c8c2d46156b02295.webm differ

← d503031 auto-data-snapshot: 2026-08-30T10:20:41 (16 data files) — ve  ·  back to Cronjobs Viewer  ·  separate launchd alerts from job errors 5316d02 →