Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9b30c12
feat: BP research capture (dev mode) — paired cuff reference + frozen…
mistral-vibe Sep 30, 2026
f08ab4f
style: align BP research screen with app typography (F.head, p.ink2),…
mistral-vibe Sep 30, 2026
f09e863
test: register BpResearchScreen in _notComponents (Scaffold route ove…
mistral-vibe Sep 30, 2026
76bc9b2
fix(review): address CodeRabbit findings on PR #477
mistral-vibe Oct 1, 2026
6642098
fix(review): merge BP research captures by natural key on restore
mistral-vibe Oct 1, 2026
2001787
fix(review): keep the destination id on a colliding BP capture restore
mistral-vibe Oct 1, 2026
caa6a26
feat(research): BP research capture v2 — measurement vs entry time, r…
mistral-vibe Oct 1, 2026
9ca9247
fix(review): immutable snapshot revisions, honest time semantics, val…
mistral-vibe Oct 1, 2026
5e34ca4
fix(review): production beat query, collision-free beat identity, rea…
mistral-vibe Oct 1, 2026
beda050
fix(review): atomic BP research restore — reference, snapshots and wi…
mistral-vibe Oct 1, 2026
8fac68d
fix(review): sync-finality pending windows, explicit reprocessing, sn…
mistral-vibe Oct 1, 2026
ed7295f
fix(review): pending windows survive empty sync — no-data null only w…
mistral-vibe Oct 1, 2026
97bd041
fix(ui): pending windows show sync hint, not a false no-data verdict
mistral-vibe Oct 1, 2026
5148c32
fix(l10n): honest 5-minute pre-measurement window texts, BP research …
mistral-vibe Oct 1, 2026
0024c45
fix(migration): self-sufficient rung-56 BP upgrade, BP repair on open…
mistral-vibe Oct 1, 2026
89af1dc
fix(tool): structured CSV validation errors instead of tracebacks, co…
mistral-vibe Oct 1, 2026
8eed002
revert unrelated formatter churn in db.dart and csv_export.dart
abdulsaheel Oct 2, 2026
11bd94d
bp research: create tables on the repair path instead of rungs 55/56,…
abdulsaheel Oct 2, 2026
6c0bf6e
bp research: an invalid beat breaks the rmssd chain, trim comments, d…
abdulsaheel Oct 2, 2026
ca3a86f
bp research: trim the restore merge comments
abdulsaheel Oct 2, 2026
c4f4e79
bp research screen: plain copy, localize the error snackbars, catch r…
abdulsaheel Oct 2, 2026
1888888
bp research model: drop pr reference from docstring
abdulsaheel Oct 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions lib/data/csv_export.dart
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,70 @@ const kCsvExportSets = <CsvExportSet>[
ORDER BY d.date ASC
''',
),
CsvExportSet(
name: 'bp_research',
title: 'BP research captures (EXPERIMENTAL)',
// Cuff readings plus the band window before each. Absent stats stay
// empty, never 0.
columns: [
'measured_at_ms',
'measurement_started_at_ms',
'measurement_finished_at_ms',
'entered_at_ms',
'device',
'posture',
'conditions',
'systolic_mmhg',
'diastolic_mmhg',
'band_device_id',
'measurement_session_id',
'time_precision',
'window_start_ms',
'window_end_ms',
'observed_start_ms',
'observed_end_ms',
'onehz_rows',
'rr_beats',
'hr_mean',
'rr_ms_mean',
'rr_ms_min',
'rr_ms_max',
'rmssd_ms',
'valid_hr_seconds',
'valid_interval_count',
'valid_interval_pair_count',
'coverage_fraction',
'rejected_interval_fraction',
'quality_status',
'feature_version',
'snapshot_revision',
'meta_json',
],
sql: '''
SELECT r.measured_at_ms, r.measurement_started_at_ms,
r.measurement_finished_at_ms,
r.captured_at_ms AS entered_at_ms,
COALESCE(r.device, '') AS device,
COALESCE(r.posture, '') AS posture,
COALESCE(r.conditions, '') AS conditions,
r.systolic_mmhg, r.diastolic_mmhg,
COALESCE(r.band_device_id, '') AS band_device_id,
COALESCE(r.measurement_session_id, '') AS measurement_session_id,
COALESCE(r.time_precision, '') AS time_precision,
w.window_start_ms, w.window_end_ms,
w.observed_start_ms, w.observed_end_ms,
w.onehz_rows, w.rr_beats,
w.hr_mean, w.rr_ms_mean, w.rr_ms_min, w.rr_ms_max, w.rmssd_ms,
w.valid_hr_seconds, w.valid_interval_count,
w.valid_interval_pair_count, w.coverage_fraction,
w.rejected_interval_fraction, w.quality_status,
w.feature_version, w.snapshot_revision,
COALESCE(w.meta_json, '') AS meta_json
FROM bp_research_reference r
LEFT JOIN bp_research_window w ON w.reference_id = r.id
ORDER BY r.measured_at_ms ASC
''',
),
];

/// What CSV deliberately does NOT carry, and why. Shown to the user on the
Expand Down
Loading