-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.gitignore
More file actions
230 lines (212 loc) · 12.3 KB
/
Copy path.gitignore
File metadata and controls
230 lines (212 loc) · 12.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# ── Personal health data & large raw recordings ─────────────────────────────
# uploads/ holds REAL biosignal recordings (overnight SpO2/ECG/PPG, CGM glucose,
# HRV exports, CPAP EDFs). Raw recordings are personal medical data AND large
# (hundreds of MB per night) — never publish them.
#
# EXCEPTION (fixes the fresh-clone gate hole): verify-provenance.html GATE B
# audits committed DERIVED node-export JSONs (summary metrics only — NO raw
# signal samples). These MUST be tracked or GATE B has nothing to read on a
# clone. They are re-included BY EXACT NAME below — never a blanket *.json,
# which would sweep in the dozens of OTHER real-recording summary exports in
# uploads/ that are NOT gate fixtures and are not chosen for publication.
# NOTE: device serials (Polar H10/Verity) were scrubbed from ALL tracked files
# 2026-06-29 (→ placeholders); committed fixtures are provenance-null/clean.
# Recording DATES remain (own data, low-identifiability, needed for fixtures).
# Future exports should scrub filenames at the ingest boundary — EXPORT-IDENTITY-BRIEF.md.
uploads/*
# PAPER-ODI4-REPRODUCIBILITY §4 — the SubjectA pilot corpus behind papers/odi4-ahi-bias.html.
# SYNTHETIC (synth-gen, seed 424242, VERSION synth-gen/2.1) so there is NO privacy bar, unlike the real
# recordings this file otherwise excludes. Committed as BYTES, not as a regeneration recipe: §4 allowed
# either, but a recorded seed alone is effectively what existed before — and it failed silently when the
# generator moved, which is why Table 1 stopped reproducing and its corpus "cannot be recovered". Bytes
# cannot move without a diff.
!uploads/O2Ring S 2100_20260511231000.csv
!uploads/O2Ring S 2100_20260512235500.csv
!uploads/O2Ring S 2100_20260513225000.csv
!uploads/O2Ring S 2100_20260514230500.csv
!uploads/O2Ring S 2100_20260515232000.csv
!uploads/ground_truth_night1.json
!uploads/ground_truth_night2.json
!uploads/ground_truth_night3.json
!uploads/ground_truth_night4.json
!uploads/ground_truth_night5.json
# verify-provenance GATE B fixtures (== FIXTURE-PROVENANCE.json "fixtures" keys):
!uploads/OxyDex_2026-06-13_1056_summary.json
!uploads/OxyDex_2026-06-25_0439_summary.json
!uploads/PulseDex_2026-06-25_equiv.node-export.json
!uploads/PulseDex_2026-06-25_events.node-export.json
!uploads/HRVDex_2026-06-25_equiv.node-export.json
!uploads/HRVDex_2026-06-25_events.node-export.json
!uploads/GlucoDex_2026-06-27_equiv.node-export.json
!uploads/PpgDex_2026-06-27_equiv.node-export.json
!uploads/ECGDex_2026-06-27_equiv.node-export.json
!uploads/cpapdex-2026-06-12.node-export.json
!uploads/cpapdex-2026-06-16.json
!uploads/cpapdex_synthetic_golden.node-export.json
!uploads/cpapdex_synthetic_multinight_golden.node-export.json
# CPAPDex BINARY-EDF equivalence leg (CPAP-REAL-CORPUS §P2). These five .edf files are
# SYNTHETIC (tools/make-synthetic-edf.mjs) — closed-form waveforms, no recording of any person,
# header identity fields blank. They are the ONLY committed equiv INPUT in the repo, which is
# what lets the compute()-equivalence diff actually RUN IN CI (every other node's input is a real
# recording, so it is gitignored and its leg skips on a fresh clone). Regenerate byte-identically
# with `node tools/make-synthetic-edf.mjs`.
!uploads/20260613_231433_BRP.edf
!uploads/20260613_231433_PLD.edf
!uploads/20260613_231433_SA2.edf
!uploads/20260613_231433_EVE.edf
!uploads/20260613_231433_CSL.edf
!uploads/cpapdex_synthetic_edf_golden.node-export.json
# CPAPDex live-vs-SD comparator pin-twin — SYNTHETIC BRP pair (one wall-clock flow sampled into two
# files, sd −159 s ×0.998) reproducing the night pin's identity verdict + 27.35-min overlap geometry.
# Real patient slices stay gitignored (health data, public repo); only the synthetic twin is committed.
!uploads/cpapdex_comparator_live_twin_BRP.edf
!uploads/cpapdex_comparator_sd_twin_BRP.edf
!uploads/cpapdex_comparator_golden.json
# P9 — SYNTHETIC vendor-format inputs + their goldens (tools/make-synthetic-inputs.mjs).
# The equivalence gate (compute() ≡ committed export) did not run in CI AT ALL: every node's
# input was a real recording, hence gitignored, hence ⊘ skipped on a fresh clone. These carry no
# personal data, so they ship — and the gate finally has teeth in CI. Deterministic: regenerate
# byte-identically with `node tools/make-synthetic-inputs.mjs`.
!uploads/synthetic_oxydex_o2ring.csv
# ADVERSARIAL twins (DEEP-AUDIT-2026-07-11 §1/§8/§9). Every input above is CLEAN, short, DMY and
# gapless, so three of the audit's worst defects were STRUCTURALLY INVISIBLE to CI. These express the
# shapes that caught them: an MM/DD date order, a dropped-row night, a full-length overnight.
!uploads/synthetic_oxydex_o2ring_dmy.csv
!uploads/synthetic_oxydex_o2ring_mdy.csv
!uploads/synthetic_oxydex_o2ring_lossy.csv
!uploads/synthetic_oxydex_o2ring_gap.csv
!uploads/synthetic_oxydex_o2ring_longnight.csv
!uploads/synthetic_oxydex_o2ring_longcycle.csv
!uploads/synthetic_pulsedex_rr.txt
!uploads/synthetic_hrvdex_welltory.csv
!uploads/synthetic_glucodex_lingo.csv
!uploads/synthetic_glucodex_lingo_gap.csv
!uploads/synthetic_ppgdex_verity.txt
# The FRAGMENTED Verity twin (INTEGRATOR-GAP-AWARE-OVERLAP-FOLLOWUPS §2.2). The clean twin above is
# contiguous, so PpgDex's coverage() returns null on it and nothing COMMITTED exercised the emitter —
# the gap derivation was gated only by inputs hand-built inside the test, which can drift with it.
# Same 40 s stream with two arm-off holes cut out, so diffing the two shows the gap and nothing else.
!uploads/synthetic_ppgdex_verity_gapped.txt
# O2Ring FINGER twin (PPGDEX-O2RING-FINGER-SITE §6) — single optical column, 8-bit, ~125.7 Hz,
# carrying BOTH sentinel classes. Closed-form, no recording of any person.
!uploads/synthetic_ppgdex_o2ring_finger.txt
!uploads/synthetic_ecgdex_h10.txt
# FRAGMENTED H10 twin (INTEGRATOR-GAP-AWARE-OVERLAP part 2) — three recorded segments inside a 60 s
# envelope. The only committed input in the repo that exercises `recording.coverage`; every other
# equiv fixture is gapless, which is precisely why the gap-aware defect shipped green.
!uploads/synthetic_ecgdex_h10_gapped.txt
!uploads/synthetic_oxydex_golden.node-export.json
!uploads/synthetic_pulsedex_golden.node-export.json
!uploads/synthetic_hrvdex_golden.node-export.json
!uploads/synthetic_glucodex_golden.node-export.json
!uploads/synthetic_glucodex_gap_golden.node-export.json
!uploads/synthetic_ppgdex_golden.node-export.json
# …and its FRAGMENTED sibling (INTEGRATOR-GAP-AWARE-OVERLAP-FOLLOWUPS §2.2) — the golden for the
# two-hole Verity twin, so recording.coverage has a committed equiv/GATE-C leg like ECGDex's.
!uploads/synthetic_ppgdex_gapped_golden.node-export.json
!uploads/synthetic_ppgdex_rich_golden.node-export.json
# …and the O2Ring FINGER golden (O2RING-ADAPTIVE-TIMEBASE Stage 3b) — pins PpgDex's device-crystal
# DEFAULT (the crystal path had no committed leg; every other PpgDex golden is a Verity).
!uploads/synthetic_ppgdex_o2ring_finger_golden.node-export.json
!uploads/synthetic_ecgdex_golden.node-export.json
!uploads/synthetic_ecgdex_gapped_golden.node-export.json
!uploads/synthetic_ecgdex_rich_golden.node-export.json
!uploads/synthetic_motiondex_acc.txt
!uploads/synthetic_motiondex_golden.node-export.json
!uploads/integrator_tch_golden.node-export.json
# Trio TCH corpus — DERIVED per-night node-exports (tools/trio-batch.mjs), the §6 input contract
# for `tools/tch-multinight.mjs --dir`. Tracked so a fresh clone reproduces the real σ distribution
# (INTEGRATOR-THREE-CORNERED-HAT-FOLLOWUPS-III §1: "commit ≥~5 more nights' three node-export JSONs").
# SAFE TO TRACK, and this is the one place a scoped un-ignore is warranted rather than the exact-name
# rule above: uploads/trio/ is a PURPOSE-BUILT directory whose only contents are generated by
# trio-batch, which runs every export through the shared dexScrubExport (no device/serial/model, no
# input filenames or hashes) and emits 5-min summary epochs — NO raw signal samples. The exact-name
# discipline above exists to stop a blanket glob sweeping the unrelated real-recording exports that
# live loose in uploads/ root; a dedicated subdir has no such neighbours to sweep.
!uploads/trio/
!uploads/trio/**
# Locally-attached raw capture folder (Polar Sensor Logger exports)
Ecg nightly/
# If you want to ship the synthetic (non-personal) corpus only, un-ignore it:
# !uploads/synthetic/
# ── Throwaway / generated ───────────────────────────────────────────────────
screenshots/
screens/
derive-bundle/
*.thumbnail
.thumbnail
# ── OS / editor cruft ───────────────────────────────────────────────────────
.DS_Store
Thumbs.db
desktop.ini
*.swp
*~
.vscode/
.idea/
# ── Node (none committed today, but guard against it) ───────────────────────
# NO trailing slash, deliberately. `node_modules/` is directory-only and does NOT match a
# SYMLINK — and symlinking the root's node_modules into a worktree is the documented way to
# work around a fresh worktree having none. The link then reads as untracked, so
# `tools/wt-done.mjs` REFUSES to clean that worktree up ("may be someone's only copy"),
# which is how orphaned trees accumulate — the failure §5b of CLAUDE.md measures in GB.
node_modules
npm-debug.log*
# ── Raw biosignal recordings outside uploads/ (June 2026 miss) ──────────────
ppg-nights/
analysis/*realdata*
Ecg nightly/
# ── AppleDouble / diagnostic / scratch ──────────────────────────────────────
._*
_diag/
scraps/
_texturetest2.html
_texworker.js
# ── Python virtualenvs / build junk ─────────────────────────────────────────
# The suite ships NO Python runtime: the GPU fast lane is WebGPU (sensor-trio-gpu.js),
# precisely so nothing here needs torch/ROCm and it still runs on Windows. Any venv is a
# LOCAL analysis scratch (e.g. an ad-hoc PyTorch/ROCm env) and must never reach the repo —
# they are multi-GB and machine-specific. NOTE: `*.py` is deliberately NOT ignored, because
# capture-host/*.py (the Polar capture host) is tracked and authored.
# BOTH FORMS, and the slashless one is the load-bearing addition. A trailing slash matches
# DIRECTORIES ONLY, so `.venv/` does NOT ignore a SYMLINK named `.venv` — which is exactly what you
# create when running the capture-host tests from a git worktree (`ln -s ../../Tepna/capture-host/
# .venv`), the workflow CLAUDE.md §1 tells you to use. It then shows up as untracked, and a blanket
# stage sweeps it into somebody's commit — the failure §2 spends a page warning about.
venv/
.venv/
venv
.venv
env/
**/venv/
**/.venv/
**/venv
**/.venv
__pycache__/
*.py[cod]
*.egg-info/
# large local model / tensor artefacts, if any analysis ever produces them
*.pt
*.pth
*.safetensors
# pytest-cov writes .coverage into the CWD, so a run from the repo ROOT lands it here rather than under
# capture-host/ (whose own .gitignore already covers it). Untracked-but-not-ignored is the worst state:
# it shows up in every `git status` in a tree several sessions share, where the rule is "files you don't
# recognize, leave them" — so real in-flight work gets harder to spot amid recurring build cruft.
.coverage
.coverage.*
htmlcov/
.mutation-crawl/
# Mutation SWEEPS — the survivor inventory tools/mutation-worklist.mjs ranks its queue from.
# A measurement, not a source, so it is not committed; but it must survive a REBOOT, which is why
# it lives here and not in /tmp. Eight /tmp paths were wiped by a restart on 2026-08-14 and the
# empty queue then read as a FINISHED one (0/0 = NaN% beside "target 99%").
.mutation-sweeps/
# c8 / coverage output — generated, never committed
coverage/
.nyc_output/
# mutation sweep journals — resumable-run state, regenerated, never committed
.mutate-journal/
# The §P2 fix lane's work queue: check.sh rewrites it on every run (PYTHON-TYPES-AND-FORMAT §P2).
# Machine-local and regenerated, never a source of truth — committing it would ship one box's
# error list as if it were the repo's.
capture-host/.mypy-latest.txt