Repository navigation
fix(biometrics): reject oversized bundle entries before writing and bad --jobs values before replaying - #841
Merged
Merged
Conversation
…ad --jobs values before replaying
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
7 tasks done
ng
enabled auto-merge
October 18, 2026 01:36
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 49 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
1 of 3 tasks
ng
added a commit
that referenced
this pull request
Oct 30, 2026
…RV and breathing references, and schedule library (#878) Promotes `dev` to `main` with personal sleep-stage models, a heart-rate estimator that stops guessing on weak signal, beat-to-beat heartbeat detection, Watch HRV and breathing references, a schedule library, and the Next.js 16.4.3 security upgrade. ## Changes - Personal sleep-stage models: train off the pod from the phone's feature contracts, run them on the pod, keep several per side, upload a `candidate.json` from Settings, and stage a side's nights with its model when switched on. Includes MCP tools (#855, #857–#860, #864, #866). - Biometrics calibration on one page, with frozen dataset export and profile fitting on a laptop (#836, #837, #841). - Heart rate: windows scoring below `heart_rate.minimumPeakScore` (default 0.4) now report no heart rate instead of a guess. In local replay this cut Watch HR error from 5.2 to 1.75 bpm on tuning nights and from 4.3 to 3.1 bpm on held-back nights, at about 75% coverage (#840). - Beat-to-beat heartbeat detection in the piezo-processor, stored per minute in a new `heartbeats` table. Vitals are unchanged. Heartbeat retries now use bounded, ordered backoff (#848, #865). - Apple Watch references: import breathing rate and HRV (SDNN), add a pod-vs-Watch deviation report with night-by-night charts on the calibration page, render Watch-only nights, and archive pod biometrics off the pod for long-term comparison (#842, #844, #845, #847, #867). - Read-only analysis snapshot export (DB backup + RAW window) and MCP tool. Health export uploads are no longer truncated at 10 MB (#843, #839). - Schedule library with switchable curves, alarm snooze length with Snooze taper, and independent tap actions for normal and while-ringing (#835, #861, #849). - Storage: eMMC endurance card, RAM-only journal, and flash write insights with recording controls (#838, #854). - Surface the frzWater tank level and sensHealth cover disconnects, and register `sensHealth`, `frzWater` and `lps` as known record types (#872, #877). - Fix the internet access toggle after a reboot and the false "firewall rules missing" notice. Also fix false high TEC and slow fan warnings on an idle pod, and grant the service user journal read access (#856, #809, #801). - Security: upgrade Next.js to 16.4.3 for three advisories and require patched Node.js in development and pod installs (#870, #868). - Add the Europe/Bucharest timezone, update dependencies, fix the Renovate config, and kill surviving mutants (#874, #851, #853, #875, #852). ## Migrations - Configuration DB: schedule library, stale gesture alarm field cleanup, side stage models and the active model, and alarm snooze (0028–0034). - Biometrics DB: reference samples, heartbeats, and 0031 (0031–0033). ## Deploy note #840 bumps the biometrics manifest to 1.1.0. Profile revisions pinned to the old manifest will report `PROFILE_INCOMPATIBLE` and must be re-proposed against the new one. ## Test plan - [x] GitHub checks on the `dev` head (`1fbb953f`): CI, Build & Package, Dev Release, Publish OpenAPI Spec, Ref Collision Check. - [ ] After merge, wait for "Analyze & Release" on the `main` merge commit, then `sudo sp-update main` once on a pod and confirm the service starts and migrations apply. - [ ] Re-propose any active biometric profile against manifest 1.1.0 and confirm it applies. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
CodeRabbit reviewed #837 directly once its base became
dev, and the review landed just after #837 merged. Three findings are valid; this PR fixes them.What
extractBundlechecks size limits before writing. It now applies the per-role size limit (RAW 256 MiB, text 16 MiB) before streaming an entry to disk. Previously a schema-valid tar could fill the disk beforeverifyBundlerejected it (CodeRabbit: Major).--jobsis validated first. It must be a positive whole number and is checked before any extraction. Previously--jobs fourproduced zero worker slots and a confusing "Missing replay output" error.--include-holdout, but the parity refusal and thefitCandidatesdoc comment still said they never were.Declined: moving
exportDatasetto the coordinator'sworklane. That lane also runs backtest replays, which last up to hours on Pod 5, so an export would wait behind them. The export's hash pass holds the read lane only for seconds (about 430 MB), and the HTTP route already allows one export at a time.Test plan
--jobsvaluesfour,4x,0and1.5are rejected before extraction; parity holdout messagevitest scripts/biometrics-local-fit(17),tsc --noEmit, eslint🤖 Generated with Claude Code
🛏️ Beam this PR onto a sleepypod ✨
Pick the snippet that matches your pod. Already-installed pods can't use the curl bootstraps below — sleepypod's egress firewall DROPs github.com, and the script that knows how to unblock WAN is the very file curl is trying to fetch. Use
sp-updateinstead; it's on disk and opens WAN as its first step.🔄 Already on a sleepypod (most common — review a PR on a running pod):
🚀 Fresh pod / first install — bootstraps from GitHub, rebuilds every push:
curl -fsSL https://raw.githubusercontent.com/sleepypod/core/fix/local-fit-review-followups/scripts/install \ | sudo bash -s -- --branch fix/local-fit-review-followups🎯 Pin to this exact build (run 39087121147 ·
251683a) — fresh-pod path, locked to one CI artifact for reproducible review:🧊 Artifact:
sleepypod-core· self-destructs in 30 days 💥