Adverse Event Timelines: test evidence
Requirement-traced qualification evidence for the safety.viz ae-timelines module.
Requirement matrix ↗ — the reviewed source specification these tests trace to.
- Scope
- 21 coverage rows36 distinct requirement IDs
- Tests executed
- 138 automated checks20 browser · 118 unit
- Result
- pass all passing9 evidence screenshots
- Generated
- 2026-07-12 05:50 UTC
- Environment
linux 6.17.0-1018-azure · node v22.23.1 · playwright 1.61.1 · chromium 149.0.7827.55- Test run
- Actions run #29181741704
Scope & approach
Traceability for the ae-timelines module (a Chart.js reimplementation of RhoInc/ae-timelines matching the original renderer's behavior, under #26), per the convention in CONTRIBUTING.md. Requirement IDs are the AET-* rows of the reviewed 43-row matrix at safety.agent docs/requirements/ae-timelines.md; rows are routed to Vitest (transforms) or Playwright (interaction/visual behavior) by judgment, since every source row is still typed planned.
Each table row traces one requirement to the automated test(s) that evidence it: the requirement ID and its source-matrix rows link back to the reviewed specification, the issue column links the implementing work, and the result column shows the recorded outcome of every matching test from the committed evidence.json with its captured screenshots. Browser evidence is captured at fixed conditions (1280×800, device scale 1) on the canonical Linux CI environment.
Browser evidence (Playwright — tests/e2e/ae-timelines.spec.js)
11 requirement rows · 11 tests
| Requirement | Source matrix rows | Issue | Tests & evidence |
|---|---|---|---|
| AET-FUNC-002/003/004/005 | AET-FUNC-002, AET-FUNC-003, AET-FUNC-004, AET-FUNC-005 | #26 |
|
| AET-FUNC-007 | AET-FUNC-007, AET-REG-002, AET-REG-013 | #26 |
|
| AET-DATA-001 (cleaning note) | AET-DATA-001 | #26 |
|
| AET-REG-001 | AET-REG-001 | #26 |
|
| AET-FUNC-006 | AET-FUNC-006, AET-REG-003 | #26 |
|
| AET-FUNC-008 | AET-FUNC-008, AET-REG-004 | #26 |
|
| AET-REG-005/006 | AET-REG-005, AET-REG-006 | #26 |
|
| AET-FUNC-009 | AET-FUNC-009, AET-REG-008, AET-API-003 | #26 |
|
| AET-FUNC-010 | AET-FUNC-010, AET-REG-012, AET-API-003 | #26 |
|
| AET-REG-009/010/011 | AET-REG-009, AET-REG-010, AET-REG-011 | #26 |
|
| AET-API-001 (module scheme) | — (see legacy-API note) | #26 |
|
Unit evidence (Vitest — tests/unit/ae-timelines/)
10 requirement rows · 27 tests
| Requirement | Source matrix rows | Issue | Tests & evidence |
|---|---|---|---|
| AET-DATA-001/004 (ADaM defaults) | AET-DATA-001, AET-DATA-004 | #26 |
|
| AET-CFG-005..012 (settings sync) | AET-CFG-005..012 | #26 |
|
| AET-FUNC-002/003/004/005 (default filters) | AET-FUNC-002..005 | #26 |
|
| AET-CFG-004, AET-DATA-003/006 (validation) | AET-CFG-004, AET-DATA-003, AET-DATA-006 | #26 |
|
| AET-DATA-001, AET-FUNC-007 (cleaning + population) | AET-DATA-001, AET-FUNC-007 | #26 |
|
| AET-FUNC-003 (color domain + N/A) | AET-FUNC-003 | #26 |
|
| AET-FUNC-006 (sort orders) | AET-FUNC-006, AET-REG-003 | #26 |
|
| AET-FUNC-002, AET-CFG-008 (serious flag) | AET-FUNC-002, AET-CFG-008 | #26 |
|
| AET-FUNC-008 (study-day domain + axes) | AET-FUNC-008, AET-REG-001 | #26 |
|
| AET-FUNC-008, AET-CFG-009 (tooltips + datasets) | AET-FUNC-008, AET-REG-004, AET-CFG-009 | #26 |
|
Visual evidence
Every screenshot below is a committed baseline: the same PNG is the visual-regression baseline the browser suite asserts against and the evidence artifact shown here. Click any capture for the full-resolution image.

AET FUNC 002 baseline timelines 
AET FUNC 006 alphabetical sort 
AET FUNC 007 participant annotation 
AET FUNC 008 hover tooltip 
AET FUNC 009 participant detail 
AET FUNC 010 back to timelines 
AET REG 001 severity filter 
AET REG 006 serious markers 
AET REG 009 detail listing
Source-matrix routing status (43 rows)
- Covered (35 rows): AET-FUNC-002..010, AET-REG-001..006 and AET-REG-008..013, AET-DATA-001/003/004/006, AET-CFG-004..012, and AET-API-003 are evidenced by the tables above. Every source row is still typed
plannedin the matrix; re-typing covered rows (planned→unit/browser) with links back to these tests is a safety.agent follow-up. - AET-REG-007 + AET-DATA-005 (2 rows, descoped): the viz-library "customized chart with queries" example — a study-specific configuration of the color/highlight settings, flagged
needs-jeremy-reviewin the matrix. The remapping mechanics it relies on are covered by the AET-CFG-005..010 tests; the example itself is not reproduced as a demo. - AET-CFG-001 + AET-CFG-002 (2 rows, descoped): legacy Webcharts settings-system rows (
needs-jeremy-review). The reimplementation ships flat safety.viz settings merged bysyncSettings; the behavior-level equivalents are covered by the AET-CFG-004..012 tests. - AET-CFG-013 + AET-CFG-014 (2 rows, descoped): the
custom_markssetting exposes raw Webcharts marktype/persemantics (needs-jeremy-review); the Chart.js reimplementation does not carry a pass-through mark API. - AET-REQ-003 (1 row, descoped): wiki link text pointing at the wrong project's wiki; the matrix AI review recommends dropping it.
- AET-API-001 (1 row, legacy API): see the legacy-API note below.
Legacy-API note: source-matrix AET-API-001 ("a factory to create a custom Webcharts chart object") describes the legacy Webcharts API, which the designs intentionally do not preserve. The module ships the histogram-proven lifecycle API instead — AET-API-001 in the module scheme — and the original's participantsSelected wrapper event becomes a DOM CustomEvent on the container element with the same data payload (AET-API-003).
Sort-direction note: AET-FUNC-006's wording is ambiguous (flagged in the matrix AI review). The original builds its y domain bottom-to-top, so its earliest and alphabetical-descending comparators read top-to-bottom as earliest-onset-first and alphabetically ascending; the reimplementation asserts those top-to-bottom orders directly.
Reproducing this report
The evidence set is regenerated from a full test run and committed with the code it qualifies; CI fails when they drift. To verify or rebuild it:
npm ci
npm run evidence:check # compare a fresh run against the committed evidence
npm run evidence # regenerate docs/evidence/ae-timelines/evidence.jsonScreenshot baselines are canonical to the Linux CI runner; the repository's Update evidence baselines workflow is the authoritative way to refresh them. See CONTRIBUTING.md for the traceability convention.