Legacy renderer trackers — what survives the move to safety.viz

2026-08-24 · every open issue in the twelve retired safetyGraphics chart trackers, read and sorted · supports hub requirement #33

What this is Twelve public issue trackers were left behind when the safetyGraphics renderers stopped being maintained. Between them they hold 282 open issues — feature requests, bug reports and questions from users, clinicians and the original maintainers, the oldest from April 2016 and the newest from October 2025. This page reads all 282 and sorts each one into three piles: worth building in safety.viz, already done there, or dead. Nothing has been filed in safety.viz or in any of the twelve trackers; the filing is @jwildfire's call.

How solid each call is 232 of the 282 were checked against safety.viz source or a reviewed requirement row, and the check is printed under each one so it can be disagreed with. The remaining 50 are marked judged — read from the issue and the port's architecture without a specific line of code behind them. Separately, 86 of the 282 issues have a title and nothing else in the tracker: no body, no comments. Those were classified from the title, which is enough for “Move bundle out of build folder” and thinner for anything subtler. Nothing was skipped, so the unassessed count is zero — but the three numbers above are not all the same quality of knowledge, and the sections below say which is which.

Jump to: the nine quick wins · worth migrating (144) · already covered (84) · obsolete (54) · method, and what was wrong

Nine quick wins

A quick win here is not a small-sounding feature. It is an item where something already built in safety.viz does most of the work, and the citation for that thing is given. Between them these nine clear 33 of the 144 migration candidates — because the legacy trackers repeat themselves, and the port's shared modules mean one change now lands in ten places.

1Make a filter a filter everywhere: start, all, multiple

Clears 6 legacy issues: ae-timelines#83 · paneled-outlier-explorer#117 · safety-delta-delta#40 · safety-histogram#152 · safety-results-over-time#99 · safety-shift-plot#85

Six trackers carry the same request, filed by the same maintainer in 2021 and never done: let a filter declare its opening value, whether it offers an “All” option, and whether it takes more than one value.

Why it is quick. Two of the twelve modules already do it. outlier-explorer normalises { value_col, label, start } and suppresses the “All” option when a start is set (src/outlier-explorer/configure.js:43); ae-explorer normalises the same shape plus a filter type (src/ae-explorer/configure.js:104-113). The other ten declare { value_col, label } and stop there. The work is lifting one normaliser into the shared shell and pointing the ten at it — the design question was settled twice already.

webcharts supports start/all/multiple but the filters in most of the safety explorer modules are hard coded with only the value_col and label properties - even if other properties are specified.

Still literally true of the port, five years on. The one warning in the thread also survives: do not test all for truthiness, because false is a valid value.

2One measures setting — which measures appear, and in what order

Clears 9 legacy issues: paneled-outlier-explorer#116 · safety-delta-delta#38 · safety-histogram#14 · safety-histogram#151 · safety-outlier-explorer#9 · safety-results-over-time#5 · safety-results-over-time#98 · safety-shift-plot#4 · safety-shift-plot#84

Two requests, nine issues, one code point. Four trackers ask to subset the measure dropdown (2016); five ask to order it by something other than the alphabet (2021).

Why it is quick. Five modules build their measure list from the same single line — unique(this.cleanData.map(row => measureLabel(row, this.settings))).sort() at histogram.js:295, outlier-explorer.js:288, results-over-time.js:193, shift-plot.js:256 and delta-delta/structureData.js:46. An ordered whitelist replaces that .sort() and answers both requests at once. The pattern is already shipping: qt-explorer has measures: ['QTcF', 'QTcB', 'Heart Rate'], an ordered list of exactly the options to offer.

Need to apply measure order in small multiples.

The 2016 thread nearly closed itself for want of a second request: “Should probably close - will mark for review”, wrote brittsikora on safety-results-over-time#5 in 2016. It got eight more.

3A Reset control on every module

Clears 9 legacy issues: ae-timelines#45 · aeexplorer#102 · paneled-outlier-explorer#36 · paneled-outlier-explorer#72 · safety-histogram#61 · safety-outlier-explorer#67 · safety-results-over-time#38 · safety-shift-plot#43 · web-codebook#144

Nine issues across seven trackers, most of them filed on one day in December 2017. The lab modules ship “Reset Limits”, which resets an axis and nothing else.

Why it is quick. hep-waterfall already does the whole thing in four lines — this.state = this.seedState(); this.buildControls(); this.render(); (src/hep-waterfall.js:586) — and hep-explorer has a longer hand-written version (resetChart(), src/hep-explorer.js:729). Every other module builds its state in one object literal in its constructor (histogram.js:95, shift-plot.js:79, qt-explorer.js:130 …), so extracting a seedState() is mechanical. Honest scope: this is per-module wiring with a proven shape, not a shared drop-in.

4ae-explorer draws no count column at all for a single-arm study

Clears 1 legacy issue: aeexplorer#148

A defect the port inherited. With one level in the group column and group_cols: false, total_col: true, the table renders neither group columns nor a Total column — exactly what RhoInc/aeexplorer#148 reported in 2020.

Why it is quick. Executed against the port rather than reasoned about: columnPlan(1, {group_cols:false, total_col:true, diff_col:true}) returns {groupCols:false, totalCol:false, diffCol:false}. The cause is one clause — totalCol = settings.total_col && groupCount > 1 (src/ae-explorer/configure.js:186) — and the guard next to it already knows this state is illegal, throwing when both columns are configured off. It just never fires when the suppression is automatic.

The total column is not rendered, resulting in a table with only the Category and AE Rate by group columns.

This is the one item in the sweep that is a live defect in shipped code rather than a missing feature.

5Say which kind of empty an empty AE table is

Clears 2 legacy issues: aeexplorer#153 · aeexplorer#155

“No AEs found” currently covers three different situations: filters that exclude every event, filters that exclude every participant, and a study with no adverse events recorded yet.

Why it is quick. One constant at src/ae-explorer.js:40, and the number the second message needs is already computed — totalN() supplies the participant denominator at ae-explorer.js:654.

Currently can't distinguish between the absence of AES and the absence of subjects.

6A standing caution on qt-explorer

Clears 2 legacy issues: qtexplorer#51 · qtexplorer#52

The QT reviewers asked for two things a year apart: a disclaimer that the tool is exploratory and not validated, and a warning about unnecessary unblinding when treatment-arm data is loaded.

Why it is quick. hep-explorer ships the mechanism: CLINICAL_CAUTION (src/hep-explorer/getPlugins.js:102) rendered once into the module shell and shown in every view (src/hep-explorer.js:312-317), specified as HEP-CAUTION-001 and deliberately not clearable. qt-explorer has only a narrow ΔΔ approximation note on one view (src/qt-explorer.js:713). Adding the standing caution is an import and an append; the unblinding warning is a second string in the same slot, and qt-explorer already colours every view by arm.

7Unscheduled visits in hep-explorer

Clears 1 legacy issue: hep-explorer#229

hep-explorer has no notion of an unscheduled visit. The 2019 issue said the fix was to copy what the other renderers do.

Why it is quick. It now is a copy. results-over-time ships an “Unscheduled visits” toggle, an unscheduled_visits pattern setting that accepts the /source/flags form, and isUnscheduledVisit() in src/results-over-time/structureData.js. In 2019 that meant reading a sibling repository; today it is an import inside one library.

We can probably use the same approach and settings established in other renderers.

8A log / linear toggle on shift-plot

Clears 2 legacy issues: safety-shift-plot#3 · safety-shift-plot#29

The oldest request in the whole sweep — April 2016 — and its follow-up: auto-scaling misleads people, so let them switch the axes to log, and let them set the ranges.

Why it is quick. Both halves exist elsewhere in the library. results-over-time has a Scale control switching its y-axis between linear and log (results-over-time.js:536); hep-explorer has an Axis Type control plus a log-base choice (HEP-CTRL-006 / HEP-CTRL-017). The range half is a shared module — src/axis-limits.js, imported by histogram, outlier-explorer and results-over-time, and by shift-plot not at all. shift-plot builds plain linear scales in src/shift-plot/getScales.js.

Auto-scaling was throwing people off, so add ability to set limits. Or toggle between log axis and linear.

Both axes share one domain in the port (SSP: “the identity line spans a domain shared by both axes”), so the toggle applies to the pair, not to each axis separately.

9Print the QT confidence intervals, don’t only draw them

Clears 1 legacy issue: qtexplorer#41

The central-tendency plot draws a confidence band. The reviewers asked for the numbers underneath it.

Why it is quick. The numbers are already computed — each arm’s mean change with a two-sided 90% CI at every visit (QT-CT-002) — and the module already renders a by-arm table, because the categorical view is one (QT-CAT-001, “hides the chart and tabulates by-arm exceedance”). This is tabulating values that exist with a renderer that exists.

The twelve trackers

Three of them live under SafetyGraphics rather than RhoInc, and two — web-codebook and paneled-outlier-explorer — map to modules safety.viz has planned but not built. Their requirement matrices exist and are marked “(planned)” in requirements/README.md; nothing in those two trackers can be “already covered” by a module of its own, so “covered” there means the capability exists elsewhere in the library and the planned module would inherit it.

Trackersafety.viz moduleOpenMigrateCoveredObsolete
RhoInc/ae-timelinesae-timelines8215
RhoInc/aeexplorerae-explorer16943
RhoInc/paneled-outlier-explorerpaneled-outlier-explorer (planned)231184
RhoInc/safety-delta-deltadelta-delta221741
RhoInc/safety-histogramhistogram11713
RhoInc/safety-outlier-exploreroutlier-explorer9261
RhoInc/safety-results-over-timeresults-over-time12741
RhoInc/safety-shift-plotshift-plot211083
RhoInc/web-codebookweb-codebook (planned)281576
SafetyGraphics/hep-explorerhep-explorer3512185
SafetyGraphics/nepExplorernep-explorer68331520
SafetyGraphics/qtexplorerqt-explorer291982

Worth migrating — 144

Grouped by the tracker they came from, open by default. Each one names the module it would land in and what is missing; where an item is one of a set repeated across trackers it carries the quick-win tag rather than repeating the argument.

RhoInc/ae-timelines2 of 8ae-timelines

RhoInc/ae-timelines#45 — Add Reset Button QW3

brittsikora · 2017-12-07 · target: ae-timelines

No module-level reset. One of nine identical Reset requests across seven trackers.

Reset exists only as hep-explorer.js:722 'Reset Chart' and hep-waterfall.js:586 'Reset chart'; the lab modules ship Reset Limits (axis only).

RhoInc/ae-timelines#83 — Allow user to specify start, all, and/or multiple properties of filters. QW1

samussiah · 2021-05-21 · target: all modules

Filters accept only value_col and label in ten of twelve modules; start / all / multiple are still not settable.

src/ae-timelines/configure.js filters — '{ value_col, label } specs' only; outlier-explorer and ae-explorer are the two that normalise a start.

RhoInc/aeexplorer9 of 16ae-explorer

RhoInc/aeexplorer#75 — Filtering on the group variable causes some unexpected behavior

jwildfire · 2017-06-29 · target: ae-explorer

Filtering on the group column still leaves an empty Difference column; the port has the same shape.

columnPlan(groupCount, settings) keys the Difference column off shown-group count, but a participant-type filter on group_col is not excluded.

RhoInc/aeexplorer#90 — Offset prevalence and difference marks plotting the same value.

samussiah · 2017-08-28 · target: ae-explorer

Prevalence and difference marks at the same value overplot.

src/ae-explorer/getPlugins.js draws the inline row plots; no jitter or offset is applied.

RhoInc/aeexplorer#102 — Add Reset Button QW3

brittsikora · 2017-12-07 · target: ae-explorer

No module-level reset control.

See QW3.

RhoInc/aeexplorer#107 — Remove highlighting of difference column when summarizeBy = "event"

bzkrouse · 2018-02-16 · target: ae-explorer

Difference-column significance shading is still drawn when summarizing by event, where the test is not valid.

summarize_by accepts 'event' (AE-REG-033/035) and the difference diamonds' alpha is not conditioned on it.

RhoInc/aeexplorer#146 — Other graphical risk metrics

matthiazzz · 2019-07-16 · target: ae-explorer

Risk ratio / odds ratio as alternatives to the risk difference, and comparison against a single reference arm.

Only a difference of proportions is implemented; no ratio metric and no reference-arm setting.

RhoInc/aeexplorer#147 — Generalize the nesting to allow for n>2 levels.

samussiah · 2020-01-15 · target: ae-explorer

Nesting beyond two levels (SOC / PT).

src/ae-explorer/configure.js is fixed at major_col / minor_col.

RhoInc/aeexplorer#148 — No Total column when group variable has only one level. QW4

samussiah · 2020-01-22 · target: ae-explorer

Live defect carried into the port: a single-level group column with group_cols:false and total_col:true draws no count column at all.

Executed: columnPlan(1,{group_cols:false,total_col:true,diff_col:true}) returns {groupCols:false,totalCol:false,diffCol:false} — configure.js:186 totalCol = total_col && groupCount > 1.

RhoInc/aeexplorer#153 — Update No AEs error message QW5

pburnsdata · 2020-09-30 · target: ae-explorer

One empty-state message where two are needed — no AEs for the selected participants, versus no participants at all.

src/ae-explorer.js:40 is the single constant; the participant denominator totalN() is already computed at ae-explorer.js:654.

RhoInc/aeexplorer#155 — No AEs error message QW5

pburnsdata · 2020-10-21 · target: ae-explorer

No message for a study that has no AE records yet, as distinct from filters that exclude them all.

Same single constant at src/ae-explorer.js:40.

RhoInc/paneled-outlier-explorer11 of 23paneled-outlier-explorer (planned)

RhoInc/paneled-outlier-explorer#22 — Refactor Data Listing from Long to Wide

jwildfire · 2017-08-25 · target: paneled-outlier-explorer (planned)

A per-participant wide listing — one section per participant, one row per measure, visits across the columns.

The shared listing (src/histogram/listing.js) is long-format only: search, sort, paginate, CSV export over flat rows.

RhoInc/paneled-outlier-explorer#36 — Add reset/clear button to clear highlighting. QW3

samussiah · 2017-08-31 · target: outlier-explorer

Clear-highlighting control. One of nine Reset requests.

See QW3.

RhoInc/paneled-outlier-explorer#39 — Highlight lines on hover.

samussiah · 2017-08-31 · target: outlier-explorer

Hover highlighting of a whole participant line. The port highlights on click, not on hover.

docs/outlier-explorer-coverage.md — 'clicking a point highlights the participant and opens a linked listing'; no hover-highlight behaviour is declared.

RhoInc/paneled-outlier-explorer#42 — Measure checkboxes should filter listing.

samussiah · 2017-08-31 · target: paneled-outlier-explorer (planned)

In a paneled view, the measure checkboxes should also narrow the listing. No paneled module exists yet.

requirements/paneled-outlier-explorer.md is marked '(planned)' in requirements/README.md; no src/paneled-* module.

RhoInc/paneled-outlier-explorer#44 — Deal with multiple normal ranges

jwildfire · 2017-09-08 · target: outlier-explorer

Measures whose normal range varies by participant (age, sex, race) draw one band; the request is to render the spread.

src/outlier-explorer/configure.js normal_range_method offers None / LLN-ULN / Standard Deviation / Quantiles — all of which resolve to a single band.

RhoInc/paneled-outlier-explorer#53 — Add option for percent change on y axis ...

jwildfire · 2017-10-06 · target: outlier-explorer

A percent-change y-axis with an interactive baseline picker. Jeremy's own comment says it 'might make more sense in the non-paneled version'.

src/outlier-explorer/getScales.js plots raw results only; no change-from-baseline transform.

RhoInc/paneled-outlier-explorer#83 — Add another participant selector option

emmorris · 2018-01-24 · target: outlier-explorer

A dropdown listing the outlying participants, so an individual can be picked without hunting on the plot.

Participant selection is click-on-point only; the participant multi-select exists in hep-explorer's composite view (compositeSelectSection) but not here.

RhoInc/paneled-outlier-explorer#116 — Add setting to sort measures other than alphanumerically. QW2

samussiah · 2021-03-21 · target: all lab modules

Measure ordering other than alphanumeric.

See QW2.

RhoInc/paneled-outlier-explorer#117 — Allow user to specify start and all properties of filters. QW1

samussiah · 2021-03-21 · target: all modules

Filter start / all properties.

See QW1.

RhoInc/paneled-outlier-explorer#118 — The charts won't display negative values.

samussiah · 2021-03-23 · target: paneled-outlier-explorer (planned)

Negative values not displayed. No paneled module exists yet; the single-measure outlier-explorer plots negatives.

src/outlier-explorer/getScales.js derives the domain from the data with no zero floor.

RhoInc/safety-delta-delta17 of 22delta-delta

RhoInc/safety-delta-delta#1 — Add "last" and "max" options for comparison time point

jwildfire · 2019-10-01 · target: delta-delta

'last' and 'max' as comparison-timepoint options, beside a named visit.

src/delta-delta/configure.js takes explicit baseline/comparison visits only; qt-explorer's TIMEPOINT_MAX sentinel (QT-CFG-005) is the pattern to copy.

RhoInc/safety-delta-delta#4 — Show Delta Calculation in Spark line

jwildfire · 2019-10-01 · target: delta-delta

Draw the delta itself on the sparkline — guide lines from baseline and comparison with an arrow between.

src/participant-profile/sparkline.js draws the value series only.

RhoInc/safety-delta-delta#10 — Don't show normal values in participant details section

jwildfire · 2019-10-23 · target: delta-delta

Suppress in-range values in the participant detail table so the abnormal ones stand out.

src/participant-profile/measureTable.js lists every measure row.

RhoInc/safety-delta-delta#19 — Sparklines should have the same x-axis domain.

samussiah · 2019-10-30 · target: delta-delta

Sparklines should share an x domain, so a participant missing the comparison visit does not appear to have been measured at it.

src/participant-profile/sparkline.js scales each series to its own extent.

RhoInc/safety-delta-delta#23 — Units not appearing for measures

dschwentker · 2019-11-25 · target: delta-delta

Still open in the port: the delta-delta measure options carry no unit, though the pattern exists next door.

src/delta-delta/structureData.js:46 lists bare measure values; histogram/outlier-explorer/results-over-time all append the unit in measureLabel. unit_col exists in delta-delta but only feeds the docked profile.

RhoInc/safety-delta-delta#25 — 0.00 Change Over Time values are showing as -0.00 in the details table and are red

dschwentker · 2019-11-25 · target: delta-delta

A change of exactly zero should read 0.00 in black, not -0.00 in red.

No negative-zero normalisation in src/delta-delta/structureData.js; qt-explorer's formatSigned (QT-SCL-006) is the nearest existing helper.

RhoInc/safety-delta-delta#29 — Choose better default baseline and comparison visits.

samussiah · 2019-12-17 · target: delta-delta

Choose sensible default baseline and comparison visits instead of the first two.

src/delta-delta/configure.js falls back to the first / second measure and the given visits; no /baseline|screening/i heuristic.

RhoInc/safety-delta-delta#32 — Annotate Pearson and Spearman correlations.

samussiah · 2021-01-26 · target: delta-delta

Annotate Pearson and Spearman correlation on the scatter.

The port has an approximation-plus-disclaimer annotation pattern already — histogram's normality and ANOVA screens (SH-CHART-005).

RhoInc/safety-delta-delta#33 — Implement brushing and/or clicking more than one point.

samussiah · 2021-01-26 · target: delta-delta

Brush or multi-click to define a subgroup on the scatter.

shift-plot is the only module with a brush; it already boxes the selection, de-emphasises the rest and opens a worst-first rail stepper.

RhoInc/safety-delta-delta#34 — Maintain brushed/clicked IDs with participantsSelected event.

samussiah · 2021-01-26 · target: delta-delta

Carry the brushed ids on participantsSelected.

shift-plot already does exactly this — 'brushing dispatches participantsSelected on the shell root, bubbling to the element'.

RhoInc/safety-delta-delta#35 — Plot aggregate when multiple IDs are selected.

samussiah · 2021-01-26 · target: delta-delta

Plot an aggregate when several participants are selected.

No aggregate-of-selection view in any module.

RhoInc/safety-delta-delta#36 — Plot visit or study day instead of visit number in small multiples.

samussiah · 2021-01-26 · target: delta-delta

Small multiples should plot visit or study day, not visit number.

src/participant-profile/sparkline.js orders on the numeric visit column.

RhoInc/safety-delta-delta#37 — Update verbiage from baseline/comparison to timepoint 1/timepoint 2.

samussiah · 2021-03-21 · target: delta-delta

Rename baseline / comparison to timepoint 1 / timepoint 2 in the UI.

Control labels are 'Baseline Visit' / 'Comparison Visit' in src/delta-delta.js and src/shift-plot.js.

RhoInc/safety-delta-delta#38 — Add setting to sort measures other than alphanumerically. QW2

samussiah · 2021-03-21 · target: all lab modules

Measure ordering; the comment adds that the order must reach the small multiples too.

See QW2.

RhoInc/safety-delta-delta#39 — Add stratification functionality.

samussiah · 2021-03-21 · target: delta-delta

Stratify the scatter by a colour aesthetic.

outlier-explorer, hep-explorer and qt-explorer all colour by group with a legend; delta-delta has no group control.

RhoInc/safety-delta-delta#40 — Allow user to specify `start` and `all` properties of filters. QW1

samussiah · 2021-03-21 · target: all modules

Filter start / all. The comment's warning still applies: false is a valid value for all.

See QW1.

RhoInc/safety-delta-delta#41 — Display visit rather than visit number in the tooltips of the small multiples.

samussiah · 2021-03-23 · target: delta-delta

Show the visit name, not the visit number, in small-multiple tooltips.

Same sparkline path as #36.

RhoInc/safety-histogram7 of 11histogram

RhoInc/safety-histogram#14 — Allow Users to Subset which Tests are Displayed QW2

brittsikora · 2016-04-18 · target: all lab modules

Subset which measures appear in the dropdown.

See QW2.

RhoInc/safety-histogram#61 — Add Reset Button QW3

brittsikora · 2017-12-07 · target: histogram

Module-level reset; histogram ships Reset Limits for the x-axis only.

src/histogram.js:366 'Reset Limits'.

RhoInc/safety-histogram#105 — Plot filtered histogram over full histogram.

samussiah · 2019-04-08 · target: histogram

Draw the filtered distribution over a faded full distribution, to compare them.

src/histogram.js bins the filtered rows only; the overview already renders one panel per measure, so a second dataset per panel is the same drawing path.

RhoInc/safety-histogram#119 — Overlay (or underlay) a density curve.

samussiah · 2019-05-30 · target: histogram

Overlay a density curve.

Chart.js line datasets compose onto the bar chart; the port already mixes marks this way (results-over-time box marks, qt-explorer CI band).

RhoInc/safety-histogram#132 — Allow user to select multiple bars by brushing the x-axis

jwildfire · 2019-08-09 · target: histogram

Brush the x-axis to select several bins at once.

Selection is one bar at a time (SH-CHART-003); shift-plot's brush is the working precedent.

RhoInc/safety-histogram#151 — Add setting to sort measures other than alphanumerically. QW2

samussiah · 2021-03-21 · target: all lab modules

Measure ordering.

See QW2.

RhoInc/safety-histogram#152 — Allow user to specify start and all properties of filters. QW1

samussiah · 2021-03-21 · target: all modules

Filter start / all.

See QW1.

RhoInc/safety-outlier-explorer2 of 9outlier-explorer

RhoInc/safety-outlier-explorer#9 — Allow Users to Subset which Tests are Displayed QW2

brittsikora · 2016-04-18 · target: all lab modules

Subset the measure dropdown.

See QW2.

RhoInc/safety-outlier-explorer#67 — Add Reset Button QW3

brittsikora · 2017-12-07 · target: outlier-explorer

Module-level reset; only Reset Limits exists.

src/outlier-explorer.js:403.

RhoInc/safety-results-over-time7 of 12results-over-time

RhoInc/safety-results-over-time#5 — Allow Users to Subset which Tests are Displayed QW2

brittsikora · 2016-04-18 · target: all lab modules

Subset the measure dropdown. The oldest of the four duplicates, and the one the others point at.

See QW2.

RhoInc/safety-results-over-time#38 — Add Reset Button QW3

brittsikora · 2017-12-07 · target: results-over-time

Module-level reset; only Reset Limits exists.

src/results-over-time.js:275.

RhoInc/safety-results-over-time#82 — Number of removed non-positive results no longer appears beside log scale radio.

samussiah · 2019-01-30 · target: results-over-time

On a log scale, the count of dropped non-positive results is not reported beside the control.

src/results-over-time.js:426 filters values <= 0 out of the log domain silently; the general removed-count note counts missing and non-numeric records, not this filter.

RhoInc/safety-results-over-time#94 — Add an Overall bar

rchronowic · 2019-08-09 · target: results-over-time

An Overall box beside the per-group boxes at each visit.

src/results-over-time.js groups draw side by side with a group-ordered legend; there is no all-groups series. ae-explorer's Total column is the nearest precedent.

RhoInc/safety-results-over-time#95 — Improve log tick rounding.

samussiah · 2019-12-23 · target: results-over-time

Log tick labels disagree with the plotted values when the interval is not a power of ten.

src/results-over-time.js:536 sets type 'logarithmic' and leaves tick generation to Chart.js — a different tick generator from the reported one, so the defect needs re-running before it is scoped.

RhoInc/safety-results-over-time#98 — Add setting to sort measures other than alphanumerically. QW2

samussiah · 2021-03-21 · target: all lab modules

Measure ordering.

See QW2.

RhoInc/safety-results-over-time#99 — Allow user to specify start and all properties of filters. QW1

samussiah · 2021-03-21 · target: all modules

Filter start / all.

See QW1.

RhoInc/safety-shift-plot10 of 21shift-plot

RhoInc/safety-shift-plot#3 — Add toggle for log vs. linear axes QW8

brittsikora · 2016-04-14 · target: shift-plot

A log / linear axis toggle.

src/shift-plot/getScales.js builds linear scales only; results-over-time has a Scale control and hep-explorer an Axis Type control with a log-base option.

RhoInc/safety-shift-plot#4 — Allow Users to Subset which Tests are Displayed QW2

brittsikora · 2016-04-18 · target: all lab modules

Subset the measure dropdown.

See QW2.

RhoInc/safety-shift-plot#16 — Specifying `config.color_by` does not affect mark fill.

samussiah · 2017-01-07 · target: shift-plot

Still open in a different form: the port's shift-plot has no colour-by at all, so there is nothing for a colour setting to fail at.

src/shift-plot/configure.js declares no group/colour setting; outlier-explorer, hep-explorer and qt-explorer all colour by group with a legend. Pairs with delta-delta #39.

RhoInc/safety-shift-plot#22 — Optionalize units argument.

samussiah · 2017-01-31 · target: shift-plot

Measure options should carry units. shift-plot's measureLabel returns the bare measure.

src/shift-plot/structureData.js:72 returns row[settings.measure_col]; histogram/outlier-explorer/results-over-time append the unit.

RhoInc/safety-shift-plot#29 — Enhance axes QW8

bzkrouse · 2017-04-26 · target: shift-plot

Three requests in one: measure/visit-aware axis titles, a log option, and adjustable axis ranges. Only the third is done.

Axis limits: src/axis-limits.js is shared and already used by histogram, outlier-explorer and results-over-time — but not by shift-plot.

RhoInc/safety-shift-plot#84 — Add setting to sort measures other than alphanumerically. QW2

samussiah · 2021-03-21 · target: all lab modules

Measure ordering.

See QW2.

RhoInc/safety-shift-plot#85 — Allow user to specify start and all properties of filters. QW1

samussiah · 2021-03-21 · target: all modules

Filter start / all.

See QW1.

RhoInc/safety-shift-plot#86 — Update verbiage from baseline/comparison to timepoint 1/timepoint 2.

samussiah · 2021-03-21 · target: shift-plot

Rename baseline / comparison to timepoint 1 / timepoint 2 in the UI. Paired with delta-delta #37.

Control labels in src/shift-plot.js.

RhoInc/safety-shift-plot#88 — Allow paneling by a categorical variable

jwildfire · 2021-06-12 · target: shift-plot

Panel the scatter by a categorical variable — from safetyGraphics v2 alpha testing.

histogram's grouped small multiples (SH-CHART-004, SH-OVW-002) are the panelling precedent in the port.

RhoInc/web-codebook15 of 28web-codebook (planned)

RhoInc/web-codebook#144 — add a reset button QW3

jwildfire · 2017-07-06 · target: web-codebook (planned)

A reset button. One of nine across the trackers.

See QW3.

RhoInc/web-codebook#188 — Allow generic user defined tabs in the nav

jwildfire · 2017-08-11 · target: web-codebook (planned)

User-defined tabs in the nav, each given an element and the codebook object.

No extension point of this kind exists in the port; the nearest thing is the shell's view selector (src/shell.js renderViewSelector).

RhoInc/web-codebook#220 — Allow different axes in small multiples on charting module

jwildfire · 2017-11-14 · target: web-codebook (planned)

Independent axes per small multiple in the charting module.

The port's small multiples go the other way — histogram's grouped panels deliberately SHARE bin boundaries (SH-CHART-004/SH-CTRL-006) — so this is a setting, and the choice matters either way.

RhoInc/web-codebook#252 — Add option for missing threshold

jwildfire · 2018-04-11 · target: web-codebook (planned)

Make the missingness threshold that turns the % missing red configurable, default 0.1.

requirements/web-codebook.md carries the summary-row rows; no module implements them yet.

RhoInc/web-codebook#255 — Add option to sort summary table variables

jwildfire · 2018-04-13 · target: web-codebook (planned)

Sort the summary table by data order, alphabetically, by missingness, or by type.

Same planned module. The shared listing sorts by column but the codebook's variable list is a different object.

RhoInc/web-codebook#257 — Search variable names and labels across multiple files

jwildfire · 2018-04-13 · target: web-codebook (planned)

Search variable names and labels across several loaded files.

Same planned module.

RhoInc/web-codebook#285 — Issues with grouping on numeric variables

jwildfire · 2018-08-24 · target: web-codebook (planned)

Grouping on a numeric column silently produces no grouped summary.

The port's group controls treat group values as strings (src/hep-explorer/getPlugins.js groupLegendEntries keys on String(value)), which is the behaviour this issue wants — but the codebook's type inference is what failed and does not exist yet.

RhoInc/web-codebook#286 — Show group-level summary statistics

jwildfire · 2018-08-24 · target: web-codebook (planned)

Group-level summary statistics above each chart.

results-over-time computes per-group box statistics already (src/box-whisker.js); the codebook's summary layout is the missing part.

RhoInc/web-codebook#295 — Outliers are hard to click

jwildfire · 2018-09-05 · target: web-codebook (planned)

A lone outlier is hard to hit with the pointer.

Related and live: results-over-time already gives outlier points a larger hover radius than their resting radius. The same trick is the fix, and nepExplorer #172 is the same complaint from 2025.

RhoInc/web-codebook#296 — Add Min/Max to summary stats

jwildfire · 2018-09-05 · target: web-codebook (planned)

Min and max in the summary statistics, or configurable statistics.

src/box-whisker.js computes the five-number summary; surfacing it as configurable summary stats is the planned module's work.

RhoInc/web-codebook#312 — make a new example showing how to add metadata to a codebook judged

jwildfire · 2019-03-30 · target: web-codebook (planned)

An example showing how to attach metadata to a codebook.

Every ported module ships a live demo page plus a generated API reference; a metadata example would follow that pattern.

RhoInc/web-codebook#320 — Large data sets cause browser to crash judged

jwildfire · 2020-02-14 · target: web-codebook (planned)

100MB-plus data crashes the browser; the profiling in the thread names the hot paths.

The port's data path is different (single cleanData pass per module, canvas rendering), so the numbers must be re-measured before the remedies in the thread are scoped. The suggestion to take column types from R rather than infer them survives intact.

RhoInc/web-codebook#321 — Add a time variable view. judged

samussiah · 2020-02-14 · target: web-codebook (planned)

A date/time variable view; dates currently classify as free text.

Planned module.

RhoInc/web-codebook#324 — Add a nested-data-explorer tab. judged

samussiah · 2020-03-17 · target: web-codebook (planned)

A nested-data-explorer tab.

Planned module.

RhoInc/web-codebook#331 — `null` values coerced to 0 for continuous variables.

samussiah · 2021-08-13 · target: web-codebook (planned)

null coerced to 0, pulling a continuous variable's domain down to zero.

The port is explicit about this class of bug — hep-explorer parses a blank study day to NaN rather than coercing it to 0 (HEP-DATA-004) — so the pattern to follow already exists.

SafetyGraphics/hep-explorer12 of 35hep-explorer

SafetyGraphics/hep-explorer#21 — Click legend to filter groups

jwildfire · 2018-03-25 · target: hep-explorer

Click a legend entry to filter that group out of the plot.

The legend is drawn by src/hep-explorer/views/scatter.js:917 from groupLegendEntries; entries are not interactive. Pairs with #160.

SafetyGraphics/hep-explorer#115 — Add filter for baseline ALP?

jwildfire · 2018-08-15 · target: hep-explorer

A baseline-ALP filter for the clinical workflow.

hep-explorer has categorical filters (HEP-CTRL-011) and one numeric range filter, for R Ratio (HEP-CTRL-010) — the numeric-range control exists and would be reused.

SafetyGraphics/hep-explorer#140 — Add option for static ULNs (not from user data)

jwildfire · 2018-09-12 · target: hep-explorer

User-defined static ULNs overriding the data-driven ones.

The port already carries a per-measure 'data-driven vs user-defined' configuration for the below-LLOQ limit (HEP-IMPUTE-001), which is the shape this asks for at the other end of the scale. The 2018 objection — that the standardisation is computed once at init — no longer holds: the display standardisation is recomputed per render (HEP-DISPLAY-001/006).

SafetyGraphics/hep-explorer#198 — Consider adding a "Highlight" functionality

jwildfire · 2019-02-01 · target: hep-explorer

Rule-based highlighting to surface Hy's Law candidates without drilling into each one.

The port highlights on one rule only — the timing window, filled vs hollow points (HEP-CTRL-008 / HEP-DISPLAY-005) — and classifies every point into a quadrant already (HEP-QUAD-004), so the classification the rules would read is in hand.

SafetyGraphics/hep-explorer#212 — Is there a way to download a set of cases?

rinjaj · 2019-04-22 · target: hep-explorer

Download the cases you can see — and the harder half, filter by quadrant so a Temple's Corollary set can be picked out.

Half of it exists: HEP-DROP-003 exports removed records, and the shared listing exports its rows to CSV. The quadrant filter does not exist, though every point is already classified (HEP-QUAD-004).

SafetyGraphics/hep-explorer#228 — Add SEND example

jwildfire · 2019-05-14 · target: hep-explorer

A SEND (nonclinical) example dataset.

The port's demos run on pharmaverseadam ADaM extracts (docs/DATA_SOURCES.md); SEND would be a second data contract, not a settings change.

SafetyGraphics/hep-explorer#229 — Deal with unscheduled visits QW7

jwildfire · 2019-05-15 · target: hep-explorer

Handle unscheduled visits, using the approach the other renderers already settled on.

results-over-time ships it: an 'Unscheduled visits' toggle, an unscheduled_visits pattern setting and isUnscheduledVisit in src/results-over-time/structureData.js. Jeremy's 2019 comment pointed at the sibling renderer; the sibling is now a shared function away.

SafetyGraphics/hep-explorer#239 — Optimize code for improved performance in very large data sets

jwildfire · 2019-05-18 · target: hep-explorer

Performance on very large datasets.

The remedies proposed in 2019 — hexbinning, hiding normal points — address SVG DOM pressure. The port draws to canvas, so the item needs re-measuring on the new renderer before it is scoped; it should not be filed as written.

SafetyGraphics/hep-explorer#262 — New view for quadrant comparison

jwildfire · 2019-07-08 · target: hep-explorer

A quadrant-comparison view: how the participants in the Hy's Law quadrant differ over time from those in the normal quadrant.

The pieces exist separately — every point is classified into a quadrant (HEP-QUAD-004) and results-over-time draws per-group boxes by visit — but nothing joins them. The 2019 comment already suspected this is its own renderer, and it is the largest genuinely new idea in the whole sweep.

SafetyGraphics/hep-explorer#273 — Only use unique study day values in animation

jwildfire · 2019-07-15 · target: hep-explorer

Step the animation over the study days that exist, not every integer day.

HEP-ANIM-005 runs 'at 100ms per remaining study day, capped at 30 seconds' — a day-count clock, so a long study with few visits still plays through the empty days. nepExplorer #173 is the same complaint from 2025 and asks for windowing.

SafetyGraphics/hep-explorer#296 — Keep x-axis domain constant across raw lab values summary table charts.

samussiah · 2019-07-24 · target: hep-explorer

Hold one x domain across the per-measure summary-table charts so they can be read against each other.

HEP-SELECT-008 draws a sparkline per measure row; src/participant-profile/sparkline.js:71 scales each row's x to [Math.min(...days), Math.max(...days)] — that row's own days.

SafetyGraphics/hep-explorer#327 — Update wording for Palt footnote

jwildfire · 2020-10-28 · target: hep-explorer

The revised PALT footnote wording, and pointing at the clinical workflow rather than the paper.

src/hep-core/palt.js:86 carries a PALT footnote; whether it is the 2020 revised wording needs checking against the text in the issue before this is filed.

SafetyGraphics/nepExplorer33 of 68nep-explorer

SafetyGraphics/nepExplorer#10 — On point hover highlight points at same timepoint in all time series charts.

samussiah · 2020-03-13 · target: nep-explorer

Hover a point and highlight the same timepoint across the time-series charts. Phase 1 has no time-series charts.

docs/nep-explorer-coverage.md covers the scatter, the zones, the summary and the filters only.

SafetyGraphics/nepExplorer#12 — Add time series chart summary statistics.

samussiah · 2020-03-13 · target: nep-explorer

Summary statistics on the time-series charts. Phase 2.

results-over-time's box statistics (src/box-whisker.js) are the computation, once the time-series view exists.

SafetyGraphics/nepExplorer#13 — Add marginal box plots.

samussiah · 2020-03-13 · target: nep-explorer

Marginal box plots.

hep-explorer ships them — a box strip above and to the right of the scatter, plus axis rugs, with a Marginal Distributions control (HEP-MARG-001..003).

SafetyGraphics/nepExplorer#21 — Add plot style control.

samussiah · 2020-03-13 · target: nep-explorer

A plot-style control — maximum values versus by-study-day. Phase 2.

NEP-DATA-003 fixes the reduction at maximum post-baseline value.

SafetyGraphics/nepExplorer#28 — Optional-ize data derivation.

samussiah · 2020-03-23 · target: nep-explorer

Accept pre-derived data instead of deriving in the module.

The port always derives: baseline identification and the per-participant reduction are NEP-DATA-001..003, with no bypass.

SafetyGraphics/nepExplorer#32 — Add a participant dropdown control.

samussiah · 2020-03-27 · target: nep-explorer

A participant dropdown. Same request as paneled-outlier-explorer #83.

hep-explorer's composite view has a participant multi-select (src/hep-explorer.js compositeSelectSection); nothing equivalent in nep-explorer.

SafetyGraphics/nepExplorer#35 — Show conversion between fold and percent change on axis tick mouseove

jwildfire · 2020-04-01 · target: nep-explorer

Show the percent equivalent of a fold change on axis-tick hover. Still meaningful: the port kept the fold axis.

NEP-UNIT-003 — 'the fold-change axis stays (it is a ratio and unit-free)'.

SafetyGraphics/nepExplorer#40 — When calculating maximal value, should the x-axis measure determine the visit window?

samussiah · 2020-04-08 · target: nep-explorer

Whether the creatinine and eGFR maxima must come from the same visit window — with a substantive clinical answer from Jim Buchanan in the thread. Phase 1 has no visit window at all.

NEP-DATA-003 reduces to the maximum post-baseline value outright. File this as a design note before Phase 2, not as a code task.

SafetyGraphics/nepExplorer#43 — Add footnote when visit window is larger than KDIGO criteria visit window.

samussiah · 2020-04-08 · target: nep-explorer

Footnote when the visit window exceeds the KDIGO criteria window. Depends on #40.

SafetyGraphics/nepExplorer#44 — Add toggle between maximal change and change from baseline.

samussiah · 2020-04-08 · target: nep-explorer

Toggle between maximal change and change from baseline.

NEP-DATA-003 fixes the reduction; qt-explorer's timepoint control with its TIMEPOINT_MAX sentinel (QT-CFG-005) is the shape.

SafetyGraphics/nepExplorer#45 — Add schedule of events table with median study days. judged

samussiah · 2020-04-08 · target: nep-explorer

A schedule-of-events table with median study days.

SafetyGraphics/nepExplorer#52 — Reevaluate hysteresis plot. judged

samussiah · 2020-04-20 · target: nep-explorer

'Reevaluate hysteresis plot. It's confusing.' The port answered it by omission; the reevaluation is the Phase 2 design note.

SafetyGraphics/nepExplorer#55 — Add BUN/creatinine ratio time series chart. judged

samussiah · 2020-04-22 · target: nep-explorer

A BUN / creatinine ratio time-series chart. Duplicated by #108, which carries Jim Buchanan's threshold lines at 10 and 20.

SafetyGraphics/nepExplorer#56 — Add RIFLE scatter plot.

samussiah · 2020-04-22 · target: nep-explorer

A RIFLE scatter beside the KDIGO one.

NEP-CFG-003 already makes the staging cut-points a setting, so a second criteria set is configuration plus a second zone painter, not a new engine.

SafetyGraphics/nepExplorer#57 — Add listing of participants on row click in KDIGO table.

samussiah · 2020-04-22 · target: nep-explorer

Click a row of the KDIGO summary table to list the participants in that stage.

Both halves exist: the summary table is NEP-TBL-001 and the shared listing (src/histogram/listing.js) is used by seven modules. Pairs with #105.

SafetyGraphics/nepExplorer#58 — Panel scatter plot. judged

samussiah · 2020-04-22 · target: nep-explorer

Panel the scatter — KDIGO beside KDIGO-DC, or beside RIFLE, or window-maximum beside baseline-change.

SafetyGraphics/nepExplorer#68 — Add eGFR calculation function

pburnsdata · 2022-08-26 · target: nep-explorer

An eGFR helper. The issue carries the full CKD-EPI 2021 specification for both eGFRcr and eGFRcr-cys, which is the expensive part of the work already done.

The port has no eGFR derivation; NEP-CFG-008 resolves creatinine only.

SafetyGraphics/nepExplorer#75 — Add Controls

pburnsdata · 2022-08-26 · target: nep-explorer

Axis-type and point-size controls. The author later decided against log but kept size open.

hep-explorer has both — an Axis Type control (HEP-CTRL-006) and a Point Size control encoding R Ratio with a legend (HEP-CTRL-007/014).

SafetyGraphics/nepExplorer#90 — Add Documentation of Data Assumptions and which charts use what settings

pburnsdata · 2023-02-24 · target: nep-explorer

Document the data assumptions and which chart reads which setting. Half of it is generated already.

Generated: src/data/schema/nep-explorer.json plus the API reference. Missing: the clinical assumptions, and the per-chart settings map.

SafetyGraphics/nepExplorer#105 — Highlight relevant cells of table when click on scatterplot

pburnsdata · 2023-03-17 · target: nep-explorer

Click a point and highlight the stage cells that participant lands in.

Both halves exist: NEP-SCAT-004 selection and NEP-TBL-001 summary table. Pairs with #57.

SafetyGraphics/nepExplorer#108 — Add BUN/creatinine Chart judged

pburnsdata · 2023-04-14 · target: nep-explorer

A BUN / serum-creatinine chart over time with threshold lines at 10 and 20 — asked for by the clinical author as a launch requirement.

SafetyGraphics/nepExplorer#111 — Add filter for Weeks and Study Days

pburnsdata · 2023-05-10 · target: nep-explorer

Restrict the window the scatter's maxima are computed over, by week and study day.

NEP-DATA-003 takes the maximum over all post-baseline records. Related to #40 and #44.

SafetyGraphics/nepExplorer#122 — Integrate with `{safetyGraphics}` and add support for multiple data domains.

samussiah · 2023-10-27 · target: nep-explorer

The half that survives: support for several data domains at once. The {safetyGraphics} integration half belongs to the R side.

Phase 1 reads one lab domain (NEP-CFG-001). Exposure and vitals are #128 and #132.

SafetyGraphics/nepExplorer#125 — How do we handle outliers?

pburnsdata · 2024-01-19 · target: nep-explorer

A large creatinine change squashes stages 1 and 2 together; log-scale controls proposed.

NEP-ZONE-005 keeps every cut-point on screen on a linear axis, which is what makes the squash. hep-explorer's Axis Type control is the precedent.

SafetyGraphics/nepExplorer#128 — Optionally include the exposure domain to pair lab results with dosing. judged

samussiah · 2024-01-30 · target: nep-explorer

Pair lab results with dosing by optionally reading the exposure domain. Duplicated by #132.

SafetyGraphics/nepExplorer#131 — Test with larger dataset (and assess performance) judged

pburnsdata · 2024-02-12 · target: nep-explorer

Test with a larger dataset and measure. Worth doing on the new renderer, where the numbers will be different.

SafetyGraphics/nepExplorer#132 — Add Exposure information judged

pburnsdata · 2024-02-12 · target: nep-explorer

Dosing on hover and a dosing-over-time chart in the participant profile, from the ISG Q1 2024 webinar.

SafetyGraphics/nepExplorer#151 — Documentation

pburnsdata · 2024-07-12 · target: nep-explorer

Scope, data-domain and unit assumptions, and a settings walkthrough. The generated reference covers the settings list; the clinical scope statements do not exist and matter.

_api/ has no nep-explorer entry yet; the schema and matrix carry the mechanical half.

SafetyGraphics/nepExplorer#157 — Label update for Ratios in charts judged

Lovemore-Gakava · 2024-09-21 · target: nep-explorer

Name the ratio in full and say what it means, rather than labelling it 'ratio'. Depends on #108.

SafetyGraphics/nepExplorer#164 — Convert Clinical Workflow to Web Document

pburnsdata · 2024-11-04 · target: nep-explorer

Turn the clinical workflow into a web document linked from the UI.

hep-explorer already does this — the Clinical guide, in the UI, with its primary sources linked (HEP-DOC-001).

SafetyGraphics/nepExplorer#172 — BetaReview: Difficulty clicking points - investigate "drawing a tiny box" behavior

Lovemore-Gakava · 2025-10-01 · target: nep-explorer

October 2025 beta feedback: points are hard to click.

results-over-time already gives outlier points a larger hover radius than their resting radius (SROT-REG-011, tests/e2e/results-over-time.spec.js:133) — the same fix. Same complaint as web-codebook #295 from 2018.

SafetyGraphics/nepExplorer#173 — BetaReview: Time animation lacks windowing controls for sparse data

Lovemore-Gakava · 2025-10-01 · target: nep-explorer

October 2025 beta feedback: the time animation needs windowing controls for sparse data.

hep-explorer's playback runs at 100ms per remaining study day (HEP-ANIM-005) and has the same weakness; hep-explorer #273 is the 2019 version of this. Fix them together.

SafetyGraphics/nepExplorer#176 — BetaReview: Day 1 lab xULNs not at baseline (non-zero values)

Lovemore-Gakava · 2025-10-01 · target: nep-explorer

October 2025 beta feedback: Day 1 xULN values are not zero, so Day 1 may not be the true baseline.

The port makes the rule explicit and configurable — a baseline_col/baseline_value pair, with earliest-record fallback by study day then visit number (NEP-DATA-001/002) — which answers 'which record is baseline'. What is left is saying so where the reviewer will read it.

SafetyGraphics/qtexplorer19 of 29qt-explorer

SafetyGraphics/qtexplorer#5 — For where there is a number...

mli1 · 2022-03-18 · target: qt-explorer

Typed entry boxes for an age range and for an exact time on the outlier plot's x-axis.

Filters are categorical selects (QT-CTRL-003). hep-explorer's R-Ratio min/max number inputs (HEP-CTRL-010) are the numeric-range precedent.

SafetyGraphics/qtexplorer#6 — Reference added to the visualization

mli1 · 2022-03-25 · target: qt-explorer

Reference material in the visualisation itself, so a reader has the context without the workflow document.

hep-explorer carries a Clinical guide in the UI with its primary sources (HEP-DOC-001); qt-explorer carries the ICH E14 threshold but no reference. Pairs with #52.

SafetyGraphics/qtexplorer#7 — four-quadrant plot (x absolute current value, y delta from baseline)

mli1 · 2022-03-25 · target: qt-explorer

A four-quadrant view: absolute current value on x, change from baseline on y.

The outlier scatter is baseline value on x, change on y (QT-SCL-004) — a different pairing. hep-explorer's eDISH/mDISH Display Type control is the shape a second pairing would take.

SafetyGraphics/qtexplorer#8 — x axis- allow point by visit

mli1 · 2022-03-25 · target: qt-explorer

Space the x-axis by visit, and handle pre-dose and post-dose ECGs at one visit.

The central-tendency view orders visits by numeric visit (QT-CT-001); the outlier view has a timepoint selector (QT-OUT-002). Neither models two readings at one visit.

SafetyGraphics/qtexplorer#9 — Box plot/ histogram

mli1 · 2022-03-25 · target: qt-explorer

A box plot and a histogram of the ECG parameter, with sample size and a per-visit filter.

The port has both displays as separate modules — results-over-time draws per-visit box marks, histogram draws distributions — but neither is wired to the ECG data contract (src/data/schema/qt-explorer.json).

SafetyGraphics/qtexplorer#11 — Central tendency_aggregate data by different way (make it an option to the user)

mli1 · 2022-03-25 · target: qt-explorer

Aggregate the central tendency by a second variable — separate lines by treatment and sex, or facet.

QT-CT-001 draws one series per treatment arm only.

SafetyGraphics/qtexplorer#12 — Cloud of data/shift from cloud to cloud judged

mli1 · 2022-03-25 · target: qt-explorer

Visit-to-visit 'cloud' movement of the whole population. Duplicate of #13.

SafetyGraphics/qtexplorer#13 — plot cloud of data points

zskrivan · 2022-03-25 · target: qt-explorer

Plot every data point and watch the cloud shift over time, with good and bad regions marked.

The pieces exist elsewhere: hep-explorer's study-day playback with motion trails (HEP-ANIM-001..008) and nep-explorer's painted stage zones (NEP-ZONE-001..005). Nothing joins them on ECG data.

SafetyGraphics/qtexplorer#26 — Plot observed or change?

mli1 · 2022-04-29 · target: qt-explorer

Say 'change from baseline' rather than 'change', and leave room for 'change from comparator'.

QT-SCL-003 builds the central-tendency axis title from a Δ/ΔΔ prefix; the wording change is in that one builder.

SafetyGraphics/qtexplorer#27 — The animation panel

mli1 · 2022-04-29 · target: qt-explorer

An animation panel that adapts to whether the data is by day, by hour or by visit.

qt-explorer has no animation; hep-explorer's playback (HEP-ANIM-001..008) is day-based and would need the same flexibility. Related to nepExplorer #173.

SafetyGraphics/qtexplorer#28 — Superimpose central tendency with outlier panel on a same panel (on top of what we have done)

mli1 · 2022-04-29 · target: qt-explorer

Superimpose the central tendency on the outlier panel.

They are separate views behind the View control (QT-CTRL-001). Related to #4, which the port did answer.

SafetyGraphics/qtexplorer#30 — Add labels to the blue lines (hover text) and add diagonal lines for change from baseline (x+y)

ghost · 2022-05-09 · target: qt-explorer

Hover text on the reference lines, and change-from-baseline diagonals.

Half done: QT-OUT-003 adds the 30/60 ms change-from-baseline lines in per-visit mode, and the absolute diagonals carry printed labels. Hover text on the lines does not exist.

SafetyGraphics/qtexplorer#41 — adding a table below QT central tendency plot with the CIs QW9

mli1 · 2022-05-24 · target: qt-explorer

A table of the confidence intervals below the central-tendency plot.

The numbers are already computed for the CI band (QT-CT-002) and the module already renders a by-arm table in the categorical view (QT-CAT-001). This is tabulating values that exist.

SafetyGraphics/qtexplorer#42 — Change mapping variable labels

ghost · 2022-05-24 · target: qt-explorer

Standard labels — 'Observed Value' and 'Change from Baseline Value' — whatever the source column is called. Consolidated with #26.

QT-SCL-003/004 build the axis titles.

SafetyGraphics/qtexplorer#43 — Modify filter to be a modal window on the charts pages

ghost · 2022-05-24 · target: qt-explorer

A filter modal reachable from each chart page rather than a separate tab.

The port's filters are already beside the chart rather than on another tab (src/shell.js), so the tab-hopping this describes is gone; a modal is a further step.

SafetyGraphics/qtexplorer#48 — Add lower/upper limit of normal to drill down on scatterplot

ghost · 2022-06-06 · target: qt-explorer

Lower and upper limits of normal on the scatter drill-down, drawn only when present in the data.

outlier-explorer already draws a normal-range band from per-record LLN/ULN columns (normal_col_low / normal_col_high, normal_range_method).

SafetyGraphics/qtexplorer#49 — Allow user to input their own horizontal reference lines

ghost · 2022-06-06 · target: qt-explorer

Let users supply their own horizontal reference lines.

The thresholds are already settings — absolute_thresholds and change_thresholds, sorted and numified on merge (QT-CFG-002) — so user-supplied cut-lines are configuration, and the line drawer is generic.

SafetyGraphics/qtexplorer#51 — Add a warning sign for unnecessary unblinding if treatment arm information is going to be imported in QW6

mli1 · 2023-03-16 · target: qt-explorer

Warn about unnecessary unblinding when treatment-arm information is loaded.

The port colours by arm throughout (QT-PLG-002) and has the standing-caution mechanism to hang this on (HEP-CAUTION-001). Pairs with #52.

SafetyGraphics/qtexplorer#52 — Add a disclaimer that the tool is only for exploration purpose (not a validated tool yet) QW6

mli1 · 2023-03-16 · target: qt-explorer

A standing disclaimer that the tool is exploratory and not validated.

hep-explorer ships exactly this: CLINICAL_CAUTION rendered once into the shell and shown in every view (src/hep-explorer.js:312-317, HEP-CAUTION-001). qt-explorer has a narrower ΔΔ approximation note (src/qt-explorer.js:713) but no standing caution.

Already covered — 84

Groups are collapsed — tap a tracker to open it.

These are requests the port has answered. Because the thirteen renderers do not do what their names suggest, each one names what covers it — a file and line, a reviewed requirement row, or a published test — so a reader can check rather than take it on trust. Eleven of the hep-explorer entries are cited to the upstream issue in safety.viz's own requirement matrix: the port mined that tracker as it went, which is why hep-explorer's covered count is the highest here and why the same discipline is worth repeating for the rest.

RhoInc/ae-timelines1 of 8ae-timelines

RhoInc/ae-timelines#44 — Support chart.destroy()

brittsikora · 2017-12-07 · target: ae-timelines

The lifecycle API the port carries includes destroy().

src/ae-timelines.js destroy(); docs/ae-timelines-coverage.md — 'lifecycle API supports init, setData, setSettings, render, resize, destroy'.

RhoInc/aeexplorer4 of 16ae-explorer

RhoInc/aeexplorer#60 — Update naming conventions for settings object

bzkrouse · 2017-04-18 · target: ae-explorer

The port renamed exactly these settings to the *_col convention the issue asks for.

src/ae-explorer/configure.js: id_col, major_col, minor_col, group_col, total_col, diff_col, pref_terms.

RhoInc/aeexplorer#61 — Accept array of value_col/label objects as well as array of strings from variables.details.

samussiah · 2017-04-25 · target: ae-explorer

details accepts column names or { value_col, label } objects.

src/ae-explorer/configure.js details — 'column names or { value_col, label } specs'; AE-REG-024.

RhoInc/aeexplorer#101 — Support chart.destroy()

brittsikora · 2017-12-07 · target: ae-explorer

destroy() is part of the port's lifecycle API.

src/ae-explorer.js destroy(); AE-API-001.

RhoInc/aeexplorer#149 — [Documentation] meaning of alpha transparency in group difference diamonds

sibyllwangxxxx · 2020-03-31 · target: ae-explorer

The port documents the difference-diamond statistic in the generated API reference and the requirement matrix rather than a wiki.

requirements/aeexplorer.md AE-USER-013; _api/ae-explorer.json diff_col.

RhoInc/paneled-outlier-explorer8 of 23paneled-outlier-explorer (planned)

RhoInc/paneled-outlier-explorer#37 — Add text detailing number of filtered/highlighted records.

samussiah · 2017-08-31 · target: outlier-explorer

The participant note reports the shown-of-total count and updates on filter.

docs/outlier-explorer-coverage.md — 'participant note reports N and % and updates on filter'.

RhoInc/paneled-outlier-explorer#38 — Add line tooltips.

samussiah · 2017-08-31 · target: outlier-explorer

Point tooltips report participant, result and time.

docs/outlier-explorer-coverage.md — 'point tooltips list participant, result, and time'.

RhoInc/paneled-outlier-explorer#40 — Make lines clickable as well as brushable.

samussiah · 2017-08-31 · target: outlier-explorer

Lines are clickable: a click selects the participant, opens the linked listing and the railed profile.

docs/outlier-explorer-coverage.md — 'clicking a point opens the railed profile ALONGSIDE the linked listing'.

RhoInc/paneled-outlier-explorer#65 — Gracefully handle filters whose variable does not exist in the data.

samussiah · 2017-10-20 · target: outlier-explorer

Filters naming an absent column are dropped with a console warning instead of throwing.

src/outlier-explorer/configure.js filters — 'Filters whose column is absent from the data are dropped with a console warning'.

RhoInc/paneled-outlier-explorer#71 — Support chart.destroy()

brittsikora · 2017-12-07 · target: outlier-explorer

destroy() is part of the port's lifecycle API.

docs/outlier-explorer-coverage.md — 'lifecycle API supports init, setData, setSettings, render, resize, and destroy'.

RhoInc/paneled-outlier-explorer#74 — Establish unique classes and IDs.

samussiah · 2018-01-03 · target: outlier-explorer

Every class in the port is namespaced already — sv-* on shared shell parts, safety-{module} on module roots.

src/shell.js createElement/applyShellStyles; module style blocks (e.g. src/hep-explorer/styles.js '.safety-hep-explorer .hep-caution').

RhoInc/paneled-outlier-explorer#77 — Remove highlighting from the data listing

emmorris · 2018-01-17 · target: outlier-explorer

The port's listing shows the selected rows only; there is no residual highlighting to remove.

docs/outlier-explorer-coverage.md — 'clicking a point highlights the participant and opens a linked listing'; src/histogram/listing.js renders the passed rows.

RhoInc/paneled-outlier-explorer#78 — Update settings merge process

brittsikora · 2018-01-19 · target: outlier-explorer

The settings merge the issue asks for is what syncSettings does in every module, with a deep clone of the defaults.

src/outlier-explorer/configure.js syncSettings — 'preserving extra keys (e.g. a filter's start value)'.

RhoInc/safety-delta-delta4 of 22delta-delta

RhoInc/safety-delta-delta#22 — Number of missing and non-numeric records not appearing in chart

dschwentker · 2019-11-25 · target: delta-delta

The removed-record count is rendered on the page, not only logged.

docs/delta-delta-coverage.md — 'missing and non-numeric results are dropped with a reported count'; SDD rows in requirements/safety-delta-delta.md.

RhoInc/safety-delta-delta#24 — Non-existent value for a required field gives mixed results

dschwentker · 2019-11-25 · target: delta-delta

A non-existent column for a required setting throws one named error instead of rendering an empty chart.

src/delta-delta/checkInputs.js throws 'Required variable(s) missing: …' for measure_col, value_col, id_col, visit_col (src/data/schema/delta-delta.json). Optional columns still fail quietly, so the half of the report about non-required fields survives.

RhoInc/safety-delta-delta#26 — Fix Visit Documentation

jwildfire · 2019-11-27 · target: delta-delta

The visit settings are documented in the generated API reference, regenerated from the source on every release.

_api/delta-delta.json; the published API page at /delta-delta/api.html.

RhoInc/safety-delta-delta#27 — Add participant selected event

jwildfire · 2019-11-27 · target: delta-delta

participantsSelected is dispatched on selection and on clear.

src/delta-delta/configure.js + src/delta-delta.js dispatch participantsSelected; docs/delta-delta-coverage.md.

RhoInc/safety-histogram1 of 11histogram

RhoInc/safety-histogram#150 — Add participant selected event

samussiah · 2021-01-26 · target: histogram

participantsSelected is dispatched from the histogram.

src/histogram/configure.js + src/histogram.js; PPRF-SH-001/002 route listing row clicks into the docked profile through it.

RhoInc/safety-outlier-explorer6 of 9outlier-explorer

RhoInc/safety-outlier-explorer#39 — Add configurable option for the descriptive variables in the details view.

jwildfire · 2017-01-24 · target: outlier-explorer

details configures the listing columns, as names or { value_col, label } specs.

src/outlier-explorer/configure.js details — 'Columns for the linked participant listing'.

RhoInc/safety-outlier-explorer#66 — Support chart.destroy()

brittsikora · 2017-12-07 · target: outlier-explorer

destroy() is part of the lifecycle API.

docs/outlier-explorer-coverage.md lifecycle test.

RhoInc/safety-outlier-explorer#128 — Clone default settings in src/index.js.

samussiah · 2019-04-09 · target: outlier-explorer

Defaults are cloned rather than shared — syncSettings deep-copies and merges.

src/outlier-explorer/configure.js syncSettings.

RhoInc/safety-outlier-explorer#129 — Update README.md.

samussiah · 2019-04-09 · target: outlier-explorer

Documentation is generated from the source: an API reference page and an evidence report per chart, per release.

_api/outlier-explorer.json; the published /outlier-explorer/api.html and /evidence.html.

RhoInc/safety-outlier-explorer#130 — add `visit_col`, visitn_col` and `studyday_col` options

jwildfire · 2019-04-25 · target: outlier-explorer

visit_col, visitn_col and studyday_col are all settings, and the x-axis toggles between the visit and study-day axes.

All three are settings, and the port went further: time_cols takes { value_col, label, type: 'linear'|'ordinal', order_col } specs — the exact structure the issue proposes, generalised — defaulting to a derived measurement axis (src/outlier-explorer/configure.js:41,164-168). Evidence: 'the x-axis toggle switches between the visit and study-day axes'.

RhoInc/safety-outlier-explorer#155 — Multiple values of LLN-ULN due to age, race, sex, etc.

sibyllwangxxxx · 2022-07-08 · target: outlier-explorer

Per-participant normal ranges are read from the data, exactly as the legacy answer said they should be.

src/outlier-explorer/configure.js normal_col_low='STNRLO' / normal_col_high='STNRHI' with normal_range_method='LLN-ULN' — the band follows each record's own limits.

RhoInc/safety-results-over-time4 of 12results-over-time

RhoInc/safety-results-over-time#37 — Support chart.destroy()

brittsikora · 2017-12-07 · target: results-over-time

destroy() exists on the module.

src/results-over-time.js destroy(). Note: the coverage doc's lifecycle test name omits destroy, so the method is present but the browser evidence line does not name it.

RhoInc/safety-results-over-time#50 — Make a footnote warning users when non-numeric records are removed

jwildfire · 2018-01-29 · target: results-over-time

The removed-record count is shown on the page, not only in the console.

docs/results-over-time-coverage.md — 'missing and non-numeric results are dropped with a reported count'.

RhoInc/safety-results-over-time#89 — Update README.md.

samussiah · 2019-04-09 · target: results-over-time

Generated API reference and evidence page per release.

_api/results-over-time.json.

RhoInc/safety-results-over-time#101 — Tooltip

udairam54 · 2021-10-06 · target: results-over-time

Tooltips are Chart.js tooltips, styleable in full, not <title> elements.

src/results-over-time/getPlugins.js builds the summary-statistics tooltip; docs/results-over-time-coverage.md — 'hovering a box exposes the summary statistics tooltip'. The 2021 answer — 'we'd need to move to a more robust tooltip system' — is what the port did.

RhoInc/safety-shift-plot8 of 21shift-plot

RhoInc/safety-shift-plot#17 — Specifying `config.details` does not affect detail listing.

samussiah · 2017-01-07 · target: shift-plot

details drives the linked listing's columns.

src/shift-plot/configure.js details — 'Columns for the linked participant listing; when null, defaults to participant ID, baseline …'.

RhoInc/safety-shift-plot#23 — Remove null visit values from visit lists.

samussiah · 2017-02-10 · target: shift-plot

Executed: listVisits already drops empty and null visit labels.

listVisits([{VISIT:'Baseline'},{VISIT:''},{VISIT:'Week 2'},{VISIT:null},{VISIT:'Week 10'}]) returns ['Baseline','Week 2','Week 10'] — unique() keeps first-seen non-empty values (SSP-REG-013/014).

RhoInc/safety-shift-plot#27 — Subject values appear jumbled and headers are not aligned

brittsikora · 2017-03-14 · target: shift-plot

The derived listing columns are rounded and the table is the shared listing's markup, not hand-aligned text.

src/shift-plot/structureData.js:167-170 rounds baseline, comparison and change to two decimals and formats percent change; src/histogram/listing.js renders the table. Source columns passed through `details` are still unformatted.

RhoInc/safety-shift-plot#30 — Make x and y axes identical

bzkrouse · 2017-04-26 · target: shift-plot

The axes share one domain, and the identity line spans it.

docs/shift-plot-coverage.md — 'the identity line spans a domain shared by both axes'.

RhoInc/safety-shift-plot#42 — Support chart.destroy()

brittsikora · 2017-12-07 · target: shift-plot

destroy() is part of the lifecycle API.

docs/shift-plot-coverage.md lifecycle test names destroy.

RhoInc/safety-shift-plot#46 — Add defineStyles.js to position controls on the left, chart in the middle, and table on the right.

samussiah · 2018-01-02 · target: shift-plot

The requested layout is the shared shell's layout, tested on the site.

docs/shift-plot-coverage.md — 'shared shell: controls left of the chart, chart above the listing'.

RhoInc/safety-shift-plot#68 — Throw a warning when the user specifies an invalid starting measure...

samussiah · 2018-06-28 · target: shift-plot

An invalid starting measure warns and falls back to an existing one.

src/shift-plot/configure.js start_value — 'falls back to the first measure (with a console warning) when absent from the data'.

RhoInc/safety-shift-plot#82 — Move data manipulation to preprocess step

jwildfire · 2019-12-02 · target: shift-plot

Data manipulation is already staged: checkInputs, then configure, then structureData, before any chart is built.

src/shift-plot/ — checkInputs.js / configure.js / structureData.js / getScales.js / getPlugins.js, the gsm.viz-style module flow the issue asks for.

RhoInc/web-codebook7 of 28web-codebook (planned)

RhoInc/web-codebook#28 — Include the number of observations in the levels when using groups in dotplot.

jwildfire · 2017-03-29 · target: web-codebook (planned)

The legend format the issue asks for — 'Level Name (n=XX)' — is the port's group legend.

src/hep-explorer/getPlugins.js:114 groupLegendEntries builds `${value} (n=${count}, ${percent}%)` (HEP-CTRL-013).

RhoInc/web-codebook#86 — add destroy method

jwildfire · 2017-05-11 · target: web-codebook (planned)

Stale-settings-on-re-render is what destroy() prevents, and every module in the port has one.

src/main.js's thirteen modules each expose init/setData/setSettings/render/resize/destroy.

RhoInc/web-codebook#118 — Dynamic height and width

bzkrouse · 2017-06-21 · target: web-codebook (planned)

Charts resize to their container and expose resize(); the R side is an htmlwidget over the same bundle.

resize() is in every module's lifecycle API; gsm.safety wraps the bundle as Widget_* htmlwidgets.

RhoInc/web-codebook#261 — Implement improved binning algorithm

jwildfire · 2018-04-19 · target: web-codebook (planned)

Data-driven binning is in the port: six named algorithms, selectable, with Custom.

src/histogram/configure.js ALGORITHMS — Square-root, Sturges, Rice, Scott, Freedman-Diaconis, Shimazaki-Shinomoto, Custom. Harrell's histboxp specifically is not among them.

RhoInc/web-codebook#284 — Add numerical precision algorithm.

samussiah · 2018-08-21 · target: web-codebook (planned)

Significant-digit handling rather than raw rounding is implemented in the port.

src/histogram/structureData.js displayDigits; qt-explorer's formatNumber trims trailing zeros and guards non-finite values (QT-SCL-005).

RhoInc/web-codebook#287 — Add details text for controls

jwildfire · 2018-08-24 · target: web-codebook (planned)

Explanatory text on controls is the port's pattern.

ae-explorer's 'E' superscript filter explanations (AE-USER-009/AE-REG-018); hep-explorer's point-size legend note (HEP-CTRL-014).

RhoInc/web-codebook#289 — Sync bin widths in grouped histograms

srosanba · 2018-08-27 · target: web-codebook (planned)

Pooled bin widths across grouped histograms is exactly what the port does.

docs/histogram-coverage.md — 'grouped small multiples share the main chart's bin boundaries' and 'bin boundaries anchor to the measure results, not the filtered subset' (#19).

SafetyGraphics/hep-explorer18 of 35hep-explorer

SafetyGraphics/hep-explorer#106 — Make Quadrant labels optional

jwildfire · 2018-08-14 · target: hep-explorer

A Quadrant Labels control turns the corner labels off, changing nothing else.

HEP-QUAD-007, cited to this issue in requirements/hep-explorer.md.

SafetyGraphics/hep-explorer#107 — Add explanatory labels or footnotes for quadrant labels.

jwildfire · 2018-08-14 · target: hep-explorer

Each quadrant summary row states what landing there means clinically.

HEP-QUAD-008, cited to this issue.

SafetyGraphics/hep-explorer#108 — Add frequencies and percentages for grouping variable

jwildfire · 2018-08-14 · target: hep-explorer

Each legend entry carries the group's participant count and its share of the plotted points.

HEP-CTRL-013, cited to this issue; src/hep-explorer/getPlugins.js:114.

SafetyGraphics/hep-explorer#111 — Improve ordering of legend for group variable

jwildfire · 2018-08-14 · target: hep-explorer

A numeric companion column (TRTN beside TRT) orders the legend in the protocol's order.

HEP-CTRL-015, cited to this issue; src/hep-explorer/availability.js:72 groupOrder.

SafetyGraphics/hep-explorer#112 — Support different base value for log axis

jwildfire · 2018-08-14 · target: hep-explorer

A Log Base control offers log10 and log2, exactly the request.

HEP-CTRL-017, cited to this issue.

SafetyGraphics/hep-explorer#160 — treatment group after subset

hongmuw · 2018-09-28 · target: hep-explorer

Groups with no participants left after a filter no longer appear in the legend.

src/hep-explorer/views/scatter.js:1239 derives host.groupValues from host.points — the SHOWN points — so a filtered-out arm drops out of the legend and the colour scale.

SafetyGraphics/hep-explorer#164 — apply labels to group drowdown

jwildfire · 2018-10-05 · target: hep-explorer

The colour-by options accept { value_col, label }, so the dropdown can be labelled.

src/hep-explorer/configure.js groups — Color-by options with a leading None (HEP-CTRL-009), normalised at configure.js:238 into { value_col, label } pairs.

SafetyGraphics/hep-explorer#207 — Update baseline behavour

jwildfire · 2019-04-19 · target: hep-explorer

The mDISH mode is withdrawn when no participant has a derivable baseline, and the default is no longer study day 0.

HEP-DISPLAY-006 — 'the baseline-adjusted (mDISH) mode is withdrawn when no participant has a derivable baseline'; HEP-DISPLAY-004.

SafetyGraphics/hep-explorer#209 — Is there an interactive way to adjust the axes?

rinjaj · 2019-04-22 · target: hep-explorer

Axes are adjustable from the UI: Lower and Upper inputs per axis, showing the limit in force, with a per-axis Reset.

HEP-AXIS-001..004. The matrix cites #238 for these rows; this issue is the same request, asked by a different user.

SafetyGraphics/hep-explorer#236 — Don't repeat colors after n=9

jwildfire · 2019-05-18 · target: hep-explorer

Past the base palette, groups take lightened then darkened variants rather than exact repeats.

HEP-CTRL-016, cited to this issue; src/hep-explorer/getPlugins.js:50 paletteColor with PALETTE_TIERS = 3.

SafetyGraphics/hep-explorer#238 — Allow user to manually adjust axes

jwildfire · 2019-05-18 · target: hep-explorer

Manual axis limits, per axis, with reset and crossed-pair handling.

HEP-AXIS-001..004, all four cited to this issue.

SafetyGraphics/hep-explorer#240 — Allow some messages to be permanent

jwildfire · 2019-05-18 · target: hep-explorer

The caution is permanent: rendered once into the shell and shown in every view, not cleared by Clear.

HEP-CAUTION-001, cited to this issue; src/hep-explorer.js:312-317 with CLINICAL_CAUTION at src/hep-explorer/getPlugins.js:102.

SafetyGraphics/hep-explorer#248 — Improve default display logic

jwildfire · 2019-05-20 · target: hep-explorer

The Display Type control offers only the modes the loaded data can be plotted in.

HEP-DISPLAY-006, cited to this issue.

SafetyGraphics/hep-explorer#274 — Make legend for point size

jwildfire · 2019-07-15 · target: hep-explorer

When Point Size encodes R Ratio the legend says what size means and which way it runs.

HEP-CTRL-014, cited to this issue.

SafetyGraphics/hep-explorer#290 — Annotate measures in spaghetti plot.

samussiah · 2019-07-22 · target: participant-profile

The spaghetti lines are labelled at their own last point, deconflicted vertically, with full measure names in the legend.

PPRF-SPAG-004 in requirements/participant-profile.md, cited to this issue; src/participant-profile/spaghetti.js measureAnnotationPlugin.

SafetyGraphics/hep-explorer#302 — Add a settings schema.

samussiah · 2019-08-30 · target: hep-explorer

There is a settings schema, and it is enforced rather than decorative.

src/data/schema/hep-explorer.json is a JSON Schema data contract validated on init (HEP-DATA-005); the generated _api/hep-explorer.json documents every setting with its type and default.

SafetyGraphics/hep-explorer#328 — Add a link to the clinical workflow as part of the UI

jwildfire · 2020-10-28 · target: hep-explorer

The clinical guide is part of the UI.

HEP-DOC-001 — the Clinical guide, carrying the R-Ratio and nR primary sources.

SafetyGraphics/hep-explorer#335 — Link to R/nR reference

jwildfire · 2022-03-20 · target: hep-explorer

The R and nR references are linked from the widget itself.

HEP-DOC-001, cited to this issue — Robles-Diaz et al. 2014 and Suh 2020.

SafetyGraphics/nepExplorer15 of 68nep-explorer

SafetyGraphics/nepExplorer#1 — Add KDIGO scatter plot.

samussiah · 2020-03-13 · target: nep-explorer

The KDIGO scatter is Phase 1 of the port: fold change against absolute change, staged, zoned and summarised.

NEP-SCAT-001, NEP-STAGE-001..004, NEP-ZONE-001..005. The remainder: the y-axis toggle to eGFR / eGFRcys is not there — see #68.

SafetyGraphics/nepExplorer#20 — Add small multiples summary table.

samussiah · 2020-03-13 · target: nep-explorer

The per-participant measure table the issue points at exists in the port, as the docked participant profile's measure table.

src/participant-profile/measureTable.js; HEP-SELECT-005/008.

SafetyGraphics/nepExplorer#53 — Remove point fill and use point fill for something else.

samussiah · 2020-04-20 · target: nep-explorer

Point fill carries meaning: it is the combined stage.

NEP-SCAT-001 — 'filled by the combined stage so the cloud reads by severity even with the zones hidden'.

SafetyGraphics/nepExplorer#74 — Add filters

pburnsdata · 2022-08-26 · target: nep-explorer

Filters are in the port and restate the summary when applied.

NEP-CFG-006; docs/nep-explorer-coverage.md — 'the filters narrow the plotted population and restate the summary'.

SafetyGraphics/nepExplorer#92 — Think about moving to standard domains

pburnsdata · 2023-02-24 · target: nep-explorer

The port took the standard long-format lab mapping rather than a custom derived domain.

NEP-CFG-001 — 'the long-format lab mapping the KDIGO scatter needs'; the demo runs on the shared pharmaverseadam extract.

SafetyGraphics/nepExplorer#99 — Return Patient ID upon clicking on a circle in scatterplot for patient profiles

pburnsdata · 2023-03-10 · target: nep-explorer

Clicking a point dispatches the participant id on the shared event.

NEP-SCAT-004 — 'dispatches the shared participantsSelected'; docs/nep-explorer-coverage.md.

SafetyGraphics/nepExplorer#101 — Move to SafetyCharts Dataset

pburnsdata · 2023-03-10 · target: nep-explorer

Moving off the custom domain is done — see #92.

NEP-CFG-001.

SafetyGraphics/nepExplorer#112 — Replace References in Patient Profile

pburnsdata · 2023-06-16 · target: nep-explorer

Demographic and vital-sign columns for the profile are settings, not hard-coded lab references.

src/participant-profile/configure.js details — 'Header demographics: column names or { value_col, label } specs' (PPRF-2).

SafetyGraphics/nepExplorer#115 — Create Unit test for the creatinine (KDIGO derivation) data function

pburnsdata · 2023-06-19 · target: nep-explorer

The KDIGO derivation is unit-tested in the port.

NEP-STAGE-001..004 and NEP-UNIT-001..003 are unit rows in requirements/nep-explorer.md with Vitest evidence in docs/nep-explorer-coverage.md.

SafetyGraphics/nepExplorer#117 — Adopt SafetyGraphics Visual Style Guide

pburnsdata · 2023-06-30 · target: nep-explorer

Every module renders through one shell and one stylesheet, so appearance is consistent by construction.

src/shell.js applyShellStyles; the sv-* control and layout classes shared by all thirteen modules.

SafetyGraphics/nepExplorer#142 — Pass Dm and VS settings to patient profile module so that the demographic table can be populated

pburnsdata · 2024-05-01 · target: nep-explorer

The profile's demographics come from configured columns, not from the lab settings.

src/participant-profile/configure.js details (PPRF-2). Same as #112.

SafetyGraphics/nepExplorer#155 — remove units from params to avoid confusion

pburnsdata · 2024-09-21 · target: nep-explorer

Units are a setting with a factor table, and the measure resolves through measure_values — so the parameter name need not carry the unit.

NEP-CFG-005, NEP-CFG-008, NEP-UNIT-001/002.

SafetyGraphics/nepExplorer#156 — Make all patient profile charts same width

pburnsdata · 2024-09-21 · target: nep-explorer

The profile's charts are one module with one layout, so widths do not vary chart to chart.

src/participant-profile/ — header, measureTable, sparkline, spaghetti, inset and aeTracks all render into the one profile layout (src/participant-profile/styles.js).

SafetyGraphics/nepExplorer#166 — Move patient profile line charts away from plotly

pburnsdata · 2025-02-05 · target: nep-explorer

The profile's line charts are not plotly. They are Chart.js, in the same bundle as everything else.

src/participant-profile/spaghetti.js and sparkline.js on Chart.js v4.

SafetyGraphics/nepExplorer#175 — BetaReview: Clarify demographics box configurability in documentation

Lovemore-Gakava · 2025-10-01 · target: nep-explorer

The demographics box is configurable and the configuration is documented — which is what the reviewer asked for.

src/participant-profile/configure.js details (PPRF-2), published in the generated API reference. The reviewer's actual ask — that users can find this out — is met by the reference page.

SafetyGraphics/qtexplorer8 of 29qt-explorer

SafetyGraphics/qtexplorer#2 — Add labels to QTc reference lines in outlier plot

xni7 · 2022-03-16 · target: qt-explorer

The absolute-QTc diagonals are drawn AND labelled with their threshold in ms — and the defaults are the three the user asked for.

src/qt-explorer/getPlugins.js:153 ctx.fillText(`${threshold} ms`, …); QT-OUT-003 draws the 450/480/500 ms diagonals.

SafetyGraphics/qtexplorer#4 — Can we put outlier plot and central tendency plot on a same page (and with a filter function)?

mli1 · 2022-03-18 · target: qt-explorer

Both plots live in one module behind a View control, with the filters in the same sidebar.

QT-CTRL-001 puts all three views in one module behind a View control, with the filters in the same sidebar (QT-CTRL-003) — so the tab-hopping between a global filter tab and a chart tab is gone, which is what #43 says the pain was. The literal request, both plots visible at once, is #28 and is not done.

SafetyGraphics/qtexplorer#15 — Add subject ID to hover info on outlier plot

ghost · 2022-03-28 · target: qt-explorer

The outlier-scatter tooltip leads with the subject id.

QT-OUT-006 / QT-PLG-003 — id, arm, baseline, value, change, visit.

SafetyGraphics/qtexplorer#25 — Data listing strucuture

mli1 · 2022-04-29 · target: qt-explorer

The port does not depend on BASEFL: baseline and change are their own column settings.

QT-DATA-001 maps baseline_col and change_col; QT-DATA-004 derives change as value − baseline when the change column is blank.

SafetyGraphics/qtexplorer#36 — Update code to allow BASE and CHG columns to be used (as the preference) and baseline flag to be used only if these are not available

ghost · 2022-05-09 · target: qt-explorer

BASE and CHG are the preferred inputs, with derivation as the fallback — the resolution this thread proposed.

QT-DATA-001, QT-DATA-004, QT-DATA-005 (the baseline record is identified from the mapped columns).

SafetyGraphics/qtexplorer#46 — Add diagonal line (x=y) to scatterplot change from baseline

ghost · 2022-06-06 · target: qt-explorer

The scatter carries its no-change reference line.

QT-OUT-005 — 'a zero no-change reference line'. On a baseline-versus-change scatter, zero change IS the x=y line of the observed-versus-baseline framing; if the #7 four-quadrant view is built, the literal diagonal returns with it.

SafetyGraphics/qtexplorer#53 — Consolidate js htmlwidgets lib source with {safetyCharts}

xni7 · 2023-09-06 · target: qt-explorer

Duplicated widget sources are gone: one library, one committed bundle, one module per chart.

src/main.js exposes all thirteen renderers from one build; gsm.safety wraps that same bundle for R.

SafetyGraphics/qtexplorer#54 — Develop vignettes and create pkgdown site

xni7 · 2023-09-06 · target: qt-explorer

The documentation the issue asks for is generated and published per release: input format, settings and evidence.

src/data/schema/qt-explorer.json (input contract), _api/qt-explorer.json (settings), docs/qt-explorer-coverage.md (evidence). The TQT-versus-phase-3 guidance is not written.

Obsolete — 54

Groups are collapsed — tap a tracker to open it.

Obsolete is a judgement, and each one states its reason. They fall into four kinds: the subject no longer exists (Webcharts and D3 internals, SVG clip-paths, bundle folders, Internet Explorer); the legacy R package or Shiny app is the target rather than the renderer, and that package is not being carried forward; the maintainers resolved it themselves in the thread and never closed it; or it was never a code request at all — a document drop, a planning note, a support question.

RhoInc/ae-timelines5 of 8ae-timelines

RhoInc/ae-timelines#70 — Update y-domain logic to work with Webcharts v1.11.4. judged

samussiah · 2019-03-25 · target: —

Webcharts y-domain logic. The port is Chart.js; there is no Webcharts filter pipeline to update.

RhoInc/ae-timelines#74 — Set y-axis format to '1d', or integer.

samussiah · 2019-06-26 · target: —

The port's ae-timelines has no numeric y-axis to format: y is a category axis of participants, one labelled row each.

src/ae-timelines/getScales.js buildScales — y: { type: 'category', labels: subjects }. If the legacy AE-count-over-time view is ever ported the request returns with it.

RhoInc/ae-timelines#79 — highlight.value needs to coerced to array in defaultSettings

samussiah · 2019-09-18 · target: —

A defect in the legacy defaultSettings.js. The port normalises highlight through syncSettings and arrayifies field-list settings.

src/ae-timelines/configure.js syncSettings / arrayify.

RhoInc/ae-timelines#81 — Chart bombing in R Markdown report judged

jwildfire · 2021-04-20 · target: —

Chart bombing inside an R Markdown htmlwidget of the legacy renderer. The R binding is now gsm.safety's Widget_* wrappers over the committed bundle.

RhoInc/ae-timelines#84 — input csv file judged

udairam54 · 2024-03-01 · target: —

A support question about loading a CSV into the legacy demo page, unanswered since 2024. The port ships live demos and a documented data contract.

RhoInc/aeexplorer3 of 16ae-explorer

RhoInc/aeexplorer#100 — Sync up AE Table with AE Explorer judged

emmorris · 2017-12-07 · target: —

An internal rename of the legacy repo's root function to match a sibling package.

RhoInc/aeexplorer#118 — Styling differences with Bootstrap turned on in CAT judged

emmorris · 2018-05-08 · target: —

Bootstrap style collisions in a Rho internal application (CAT). The port scopes its own CSS under safety-* / sv-* class names.

RhoInc/aeexplorer#138 — Group levels setting lost on group variable change.

samussiah · 2018-10-23 · target: —

The legacy groups option, which the maintainers resolved to deprecate ('I kind of just want to deprecate the groups option'). The port derives group levels from the data and caps them with max_groups.

src/ae-explorer/configure.js groups — 'Null derives every level found in group_col, sorted'.

RhoInc/paneled-outlier-explorer4 of 23paneled-outlier-explorer (planned)

RhoInc/paneled-outlier-explorer#43 — Long titles in multiples are pushing buttons down, offsetting charts.

samussiah · 2017-09-07 · target: —

A layout defect in the legacy small-multiples markup. The port lays panels out with the shared shell and CSS grid.

src/shell.js renderShell / applyShellStyles.

RhoInc/paneled-outlier-explorer#50 — Remove padding of multiples. judged

samussiah · 2017-09-28 · target: —

Padding of the legacy small multiples, to be fixed via defineStyles(). Neither the panels nor defineStyles() exist in the port.

RhoInc/paneled-outlier-explorer#95 — Add circles for non-normal values when zoomed in

jwildfire · 2018-02-01 · target: —

Non-normal markers 'when zoomed in'. The port has no zoom/pan; axis range is set by typed limits.

src/axis-limits.js is the only domain-narrowing affordance.

RhoInc/paneled-outlier-explorer#108 — Move bundle out of build folder. judged

samussiah · 2019-05-03 · target: —

Bundle placement in the legacy build/ folder. The port commits versioned esbuild bundles to dist/safety.viz-{version}/.

RhoInc/safety-delta-delta1 of 22delta-delta

RhoInc/safety-delta-delta#18 — Move .js styling to styles.js.

samussiah · 2019-10-30 · target: —

Extracting inline styling into styles.js in the legacy repo. The port already keeps module CSS in a styles module or a single scoped block.

src/hep-explorer/styles.js, src/participant-profile/styles.js.

RhoInc/safety-histogram3 of 11histogram

RhoInc/safety-histogram#141 — Figure out what SVG elements are causing D3 to throw errors on resize.

samussiah · 2019-11-26 · target: —

D3 throwing on resize over SVG elements. The port renders to canvas via Chart.js and has a tested resize() path.

SH-API-001 — 'lifecycle API supports init, setData, setSettings, render, resize, destroy'.

RhoInc/safety-histogram#142 — Move inline .js styling to ./src/styles.js. judged

samussiah · 2019-11-26 · target: —

Extracting inline styling in the legacy repo; the port's CSS is already in scoped modules.

RhoInc/safety-histogram#144 — Update R test framework

jwildfire · 2019-12-05 · target: —

Replacing the legacy repo's R validation program with testthat. The port's evidence is Vitest plus Playwright keyed to requirement IDs, published per release.

docs/histogram-coverage.md; the published evidence page.

RhoInc/safety-outlier-explorer1 of 9outlier-explorer

RhoInc/safety-outlier-explorer#145 — Documentation for `custom_marks`

jwildfire · 2020-02-05 · target: —

Documentation for the legacy custom_marks setting. The port has no custom_marks; mark styling is per-module Chart.js configuration and every setting it does have is documented in the generated API reference.

_api/outlier-explorer.json settings list.

RhoInc/safety-results-over-time1 of 12results-over-time

RhoInc/safety-results-over-time#92 — Ensure checkboxes are not overlapped by other controls.

samussiah · 2019-07-10 · target: —

Control overlap in the legacy floated layout. The port's controls live in the shared shell's sidebar, one control per row.

src/shell.js controlBuilders — sv-control-section / sv-control-row / sv-control.

RhoInc/safety-shift-plot3 of 21shift-plot

RhoInc/safety-shift-plot#73 — Update test-page to use jsdelivr CDN and data-library. judged

samussiah · 2019-04-04 · target: —

Repointing the legacy test page from rawgit to jsdelivr. rawgit shut down in 2019; the port ships its own demo site and committed bundles.

RhoInc/safety-shift-plot#74 — clip-path of equality line should be set to chart.id. judged

samussiah · 2019-05-03 · target: —

An SVG clip-path id collision in the legacy renderer. Chart.js clips to the chart area on canvas; there is no clip-path element.

RhoInc/safety-shift-plot#75 — Move bundle out of build folder. judged

samussiah · 2019-05-03 · target: —

Bundle placement in the legacy build/ folder.

RhoInc/web-codebook6 of 28web-codebook (planned)

RhoInc/web-codebook#175 — Add 'Save Settings' button rather than re-rendering on each change. judged

samussiah · 2017-08-03 · target: —

A Save Settings button on the legacy settings page, to avoid re-rendering on every change. The port has no settings page; settings are a constructor argument plus setSettings().

RhoInc/web-codebook#215 — Dot Plots not grouping correctly judged

jwildfire · 2017-10-25 · target: —

A grouping defect in the legacy dot plots, which the maintainer proposed removing outright ('I think that the dot plots are rarely used and have a few issues. Considering removing them altogether').

RhoInc/web-codebook#217 — Codebook bombs when defaultTab is set to tabs[0] and tabs[0] is not a valid tab. judged

samussiah · 2017-10-27 · target: —

A crash from the legacy defaultTab setting; no tab machinery is carried forward.

RhoInc/web-codebook#273 — IE Only Bugs judged

danedexF5 · 2018-06-12 · target: —

Internet Explorer regression testing. IE reached end of support in 2022 and Chart.js v4 does not target it.

RhoInc/web-codebook#302 — [explorer] Sort newly added files first. judged

samussiah · 2018-09-12 · target: —

Sort order of files in the legacy explorer's file list. No multi-file explorer exists or is planned.

RhoInc/web-codebook#303 — Keep Choose a File text in place after loading a file. judged

samussiah · 2018-09-13 · target: —

Wording of the legacy file-picker's label after a load.

SafetyGraphics/hep-explorer5 of 35hep-explorer

SafetyGraphics/hep-explorer#84 — Update ParticipantProfileURL setting

jwildfire · 2018-07-12 · target: —

A per-participant external profile URL. The port docks the participant profile in the page instead of linking out, so there is nothing for a URL template to point at.

HEP-SELECT-002/008; src/profile-host.js mounts the shared participant-profile module in the shell's profile slot.

SafetyGraphics/hep-explorer#237 — Add option to minimize messages after expanding

jwildfire · 2019-05-18 · target: —

Minimising the legacy renderer's expandable message stack. The port has no message stack: notes are rendered in place and the one standing message is deliberately permanent.

HEP-CAUTION-001.

SafetyGraphics/hep-explorer#251 — Use `export default` for all functions judged

jwildfire · 2019-06-06 · target: —

An export-style convention inside the legacy source tree.

SafetyGraphics/hep-explorer#299 — hep-explorer not rendering any data in IE judged

danedexF5 · 2019-08-13 · target: —

Internet Explorer rendering. IE is out of support and Chart.js v4 does not target it.

SafetyGraphics/hep-explorer#325 — oninit/cleanData/dropRows isn't running

jwildfire · 2020-08-11 · target: —

A specific variable-name bug in the legacy onInit pipeline. That pipeline is gone; the port's drop path is specified and tested.

HEP-DROP-001..003.

SafetyGraphics/nepExplorer20 of 68nep-explorer

SafetyGraphics/nepExplorer#22 — Replace tooltips with modals.

samussiah · 2020-03-16 · target: —

Replacing tooltips with modals, to fit more information in. The port's tooltip already carries the six lines the modal was for.

NEP-SCAT-002/003 — participant, stage, fold change with stage, absolute change with stage, baseline, maximum, visit and study day.

SafetyGraphics/nepExplorer#36 — hysteresis plot issue judged

zskrivan · 2020-04-01 · target: —

A defect in the legacy hysteresis plot. The port did not carry a hysteresis plot; see #52 for the design question that outlives the bug.

SafetyGraphics/nepExplorer#50 — Update configuration and data guidelines wikis.

samussiah · 2020-04-17 · target: —

Updating the legacy repo's configuration and data-guidelines wikis. The port documents settings in a generated API reference and inputs in a JSON Schema data contract.

src/data/schema/nep-explorer.json; NEP-CFG-001..008.

SafetyGraphics/nepExplorer#51 — Add additional data guidelines section for what the derived data should look like. judged

samussiah · 2020-04-17 · target: —

A wiki section describing the derived-data shape, which the port does not accept as input. See #28.

SafetyGraphics/nepExplorer#62 — Renal documents judged

JimBuchanan · 2022-03-10 · target: —

A document drop, not a request: the AKI classification literature review and the nephrotoxicity notes. Worth keeping for Phase 2 reading; there is nothing to build.

SafetyGraphics/nepExplorer#93 — Create pretty readme with code example judged

pburnsdata · 2023-02-24 · target: —

A readme for the legacy R package. Jim Buchanan's summary paragraph in the thread is still the best short description of the tool and is worth reusing.

SafetyGraphics/nepExplorer#100 — Add HTML export judged

pburnsdata · 2023-03-10 · target: —

Closed in substance by its own author's comment: 'duplicate'.

SafetyGraphics/nepExplorer#118 — Test out SG app + Patient Profiles + Clicking Patient judged

pburnsdata · 2023-07-14 · target: —

A test of the legacy Shiny app's patient-profile hand-off. The port docks the profile in-page and links modules through participantsSelected.

SafetyGraphics/nepExplorer#119 — Can we get a data storage four our working group... judged

pburnsdata · 2023-07-14 · target: —

A request for working-group file storage. Not a renderer feature.

SafetyGraphics/nepExplorer#129 — update test data to fit with standalone app

pburnsdata · 2024-02-09 · target: —

Test data for the legacy standalone R app. The port's demo data is the shared pharmaverseadam extract plus a deterministic synthetic AKI cohort.

NEP-COHORT-001..012.

SafetyGraphics/nepExplorer#130 — develop roadmap to end of april judged

pburnsdata · 2024-02-09 · target: —

A planning item — 'develop roadmap to end of april' — from February 2024.

SafetyGraphics/nepExplorer#138 — Potentially add settings$baseline_values to create_nepexplorer_app judged

pburnsdata · 2024-02-26 · target: —

A settings argument on the legacy create_nepexplorer_app() R function.

SafetyGraphics/nepExplorer#141 — Make the merge more robust (e.g. what if missing certain variables or domains)

pburnsdata · 2024-04-19 · target: —

Robustness of the legacy R app's domain merge. The port validates its inputs against a JSON Schema contract and throws one named error.

NEP-DATA-006 checkInputs.

SafetyGraphics/nepExplorer#149 — confirm absence of egfr from data causes chart not to draw judged

pburnsdata · 2024-07-08 · target: —

Verification of a legacy R patient-profile chart's behaviour when eGFR is absent.

SafetyGraphics/nepExplorer#150 — Improve Reference file in pckgdown judged

pburnsdata · 2024-07-12 · target: —

pkgdown reference organisation for the legacy R package.

SafetyGraphics/nepExplorer#165 — Test different R versions judged

pburnsdata · 2024-11-04 · target: —

Testing the legacy R package against several R versions.

SafetyGraphics/nepExplorer#171 — Submit to CRAN judged

pburnsdata · 2025-03-07 · target: —

CRAN submission for the legacy R package. The R route for these charts is gsm.safety's Widget_* htmlwidgets over the safety.viz bundle.

SafetyGraphics/nepExplorer#174 — BetaReview: Inactive checkbox flashing issue in safetyGraphicsInit() judged

Lovemore-Gakava · 2025-10-01 · target: —

A flashing checkbox in the legacy R app's safetyGraphicsInit() launcher.

SafetyGraphics/qtexplorer2 of 29qt-explorer

SafetyGraphics/qtexplorer#34 — Ask safetygraphics developers if filter indictor in top right can be expanded to make it more obvious to the user that filter is active

ghost · 2022-05-09 · target: —

A request to the safetyGraphics Shiny app's maintainers about its global filter indicator. The port's filters sit in the module's own sidebar beside the chart, which is what the thread was reaching for.

src/shell.js renderShell — controls left of the chart.

SafetyGraphics/qtexplorer#45 — Customize landing page to tailor to QT Explorer judged

ghost · 2022-05-24 · target: —

A landing page for the legacy Shiny app. The port's equivalent is the module's own demo page on the documentation site.

Method, and what was wrong

The freshest signal in the corpus Five nepExplorer issues from October 2025 are beta-review feedback from real users, and two of them are complaints the library has heard before. “Difficulty clicking points” repeats web-codebook #295 from 2018, and results-over-time already ships the fix — outlier points get a larger hover radius than their resting radius. “Time animation lacks windowing controls for sparse data” repeats hep-explorer #273 from 2019, and hep-explorer's playback has the same weakness today: it runs at 100 ms per remaining study day, so a long study with few visits plays through the empty ones. Those two are worth fixing in both places at once.

Drafted by Claude Code using Opus 5 in an unattended session — not yet reviewed by @jwildfire. Nothing has been filed in safety.viz, and nothing at all was written to RhoInc or SafetyGraphics.