Safety Histogram: test evidence
Requirement-traced qualification evidence for the safety.viz histogram module.
Requirement matrix ↗ — the reviewed source specification these tests trace to.
- Scope
- 35 coverage rows54 distinct requirement IDs
- Tests executed
- 142 automated checks33 browser · 109 unit
- Result
- pass all passing16 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 histogram module (extracted from the safety-histogram pilot, dev @ a3ff9f7, under #2), per the convention in CONTRIBUTING.md. Two requirement-ID schemes appear:
- Module IDs (
SH-CTRL-*,SH-CHART-*,SH-LIST-*,SH-DATA-*,SH-API-*) — the pilot's condensed matrix, used by design #2's decomposition mapping. - Source matrix rows (
SH-FUNC-*,SH-REG-*,SH-CFG-*, …) — the reviewed matrix at obot.agentdocs/requirements/safety-histogram.md, whoseEvidence Typecolumn routes rows (unit→ Vitest,browser→ Playwright).SH-OVW-*rows are post-pilot additions — the all-measures overview (#39) is new capability beyond the original renderer.
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/histogram.spec.js)
24 requirement rows · 24 tests
| Requirement | Source matrix rows | Issue | Tests & evidence |
|---|---|---|---|
| SH-CTRL-001/SH-CTRL-002/SH-CTRL-006 | SH-FUNC-001, SH-FUNC-002 | #2 |
|
| SH-CTRL-003 | SH-FUNC-003 | #2 |
|
| SH-DATA-002 | SH-CFG-005 | #2 |
|
| SH-CHART-003 | SH-FUNC-008, SH-FUNC-010, SH-FUNC-012 | #2 |
|
| — | SH-FUNC-011 | #2 |
|
| SH-LIST-001/002/003/004 | SH-FUNC-008 | #2 |
|
| SH-CTRL-004 | SH-FUNC-004A, SH-FUNC-004B | #2 |
|
| — | SH-FUNC-004C | #2 |
|
| SH-CTRL-005 | SH-FUNC-005A, SH-FUNC-005B, SH-FUNC-005D | #2 |
|
| — | SH-FUNC-005C | #2 |
|
| SH-CTRL-007 | — | #2 |
|
| SH-CHART-005 | — (see SH-REG-078 note) | #2 |
|
| SH-CHART-004 | — | #2 |
|
| SH-CHART-004/SH-CTRL-006 | — | #19 |
|
| SH-CTRL-006 | — | #19 |
|
| SH-CTRL-008 | SH-REG-024, SH-REG-025, SH-REG-026 | #19 |
|
| SH-CTRL-008 | SH-REG-020 | #19 |
|
| SH-API-001 (module scheme) | — (see legacy-API note) | #2 |
|
| — | SH-OVW-001 | #39 |
|
| — | SH-OVW-001 | #39 |
|
| — | SH-OVW-002 | #39 |
|
| — | SH-OVW-003 | #39 |
|
| — | SH-OVW-004 | #39 |
|
| — | SH-OVW-005 | #39 |
|
Unit evidence (Vitest — tests/unit/histogram/)
11 requirement rows · 31 tests
| Requirement | Source matrix rows | Issue | Tests & evidence |
|---|---|---|---|
| SH-CFG-004..009 (defaults) | SH-CFG-004..009 | #2 |
|
| SH-CFG-010/011, SH-CHART-004 | SH-CFG-010, SH-CFG-011 | #2 |
|
| SH-CFG-013/014 | SH-CFG-013, SH-CFG-014 | #2 |
|
| SH-DATA-001/002 | SH-CFG-005 | #2 |
|
| SH-CTRL-002/005/006 | SH-FUNC-004C (detection) | #2 |
|
| SH-CTRL-006 (original QC) | — | #19 |
|
| SH-CTRL-005/007 | SH-FUNC-005A, SH-FUNC-005B | #2 |
|
| SH-CHART-002/005 | SH-FUNC-011 (colors) | #2 |
|
| SH-LIST-002/003/004 | — | #2 |
|
| SH-DATA-001/003 (schema) | SH-DATA-001 | #2 |
|
| SH-API-001 (module export) | — | #2 |
|
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.

SH-CHART-004— grouped multiples
SH-CHART-005— pvalue disclaimer
SH-CTRL-001— control panel
SH-CTRL-004— normal range overlay
SH-CTRL-005— axis limits
SH-CTRL-006— shared bin multiples
SH-CTRL-007— boundary ticks
SH-CTRL-008— bins inputs populated
SH-DATA-002— invalid data note
SH-FUNC-004C— control hidden for pulse
SH-FUNC-010— linked listing
SH-FUNC-011— bar de emphasis
SH-LIST-004— search sort paginate
SH-OVW-002— overview panels
SH-OVW-003— click through to pulse
SH-OVW-005— overview filtered
Source-matrix routing status (125 rows)
browser(11 rows): the 10 reviewed rows are covered above (SH-FUNC-004A–C, SH-FUNC-005A–D, SH-FUNC-010, SH-FUNC-011, SH-FUNC-012). SH-REG-078 (statusreplaced) is superseded by design #2's p-value disposition: the shipped approximate screening annotations intentionally carry the validation disclaimer, so no test asserts the legacy text's removal.manual(8 rows): SH-REG-044/045/047/058/059/061/081/082 carry manual review evidence and are out of scope for automated coverage.planned(106 rows): not yet routed tounit/browserin the source matrix. Where a test here already evidences a planned row it is listed under "Source matrix rows" above; re-typing those rows (planned→unit/browser) with links back to these tests is a safety.agent follow-up.
Legacy-API note: source-matrix SH-API-001 ("a factory to create a custom Webcharts chart object") describes the legacy Webcharts API, which the designs intentionally do not preserve (pilot SH-API-002). The module ships the pilot's lifecycle API instead — SH-API-001 in the module scheme.
SH-REG-024 note: the row's inputs-update behavior is evidenced by SH-CTRL-008; its info-icon clause (an ⓘ link to the algorithm's description) is not ported.
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/histogram/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.