Repository navigation
Conversation
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.
Problem and behavior
Opening a complete chronic sorting in the existing in-memory curation model does not scale to 1000-hour recordings. This PR prepares bounded contiguous observation windows, supports semantic curation of that evidence, and replays committed actions against the complete immutable source into a separate validated output.
phy prepare-large SOURCE_PARAMS OUTPUTvalidates the source, preserves exact int64 sample/global-row coordinates, generates full-duration counts and exposure-aware summaries, and writes a budgeted evidence package.phy template-gui OUTPUT/params.pyactivates a separate bounded controller only when its manifest is present.phy apply-curation SOURCE_PARAMS BOUNDED OUTPUTstreams supported actions into a new complete sorting.Implementation
The commit sequence covers the contract, services, GUI, hardening, and documentation within this single PR. The guide is
docs/long-recordings.md; measured evidence and acceptance limits are indesign/large-recording-validation.md.Validation
The subsequent window-labeling update passed 19 focused GUI/controller tests, lint, formatting, codespell, and
make doc-check; CI is rerunning for that revision.CI before the window-labeling update, on
94adf852is fully green: all nine Linux/macOS/Windows × Python 3.10–3.12 test jobs, documentation, codespell, and package build. The Windows 3.11 log reports 760 passed, 1 existing skip. CI run.make test-full: 756 passed, 1 existing benchmark skip (496 core + 260 application tests).make lint,make format-check,make doc-check, anduv buildpassed. Built wheel contains all long-recording runtime modules.Screenshots
Actual Qt application captures from a reproducible synthetic eight-hour fixture. These illustrate the UI; they are not measurements of chronic recording quality. Regenerate with
tools/capture_long_recording_views.pyunder Xvfb/software Mesa; the command and captions are indocs/long-recordings.md.Unit Stability: complete-source rates and finite-value amplitude/depth means, with acquisition gaps in gray and retained windows in cyan.
Windowed evidence: source amplitudes at top left, explicitly labeled as seconds from window start with the recording-time range above the plot; sampled ISI at top right, sampled correlograms below it, and window-relative features along the bottom.
Acceptance limits
Draft pending real chronic-recording and curator acceptance. Synthetic sparse-clock fixtures do not establish billion-spike capacity, Qt responsiveness on every hardware/source layout, or biological identity over 1000 hours. Survey/rescue evidence is not a probability sample, and sampled diagnostics must not be interpreted as full-recording quality metrics. The workflow currently requires a single fixed-rate monotonic sample clock, explicit authoritative exposure, supported canonical arrays, and nonnegative int32-compatible unit IDs; time/global-row coordinates are int64. Producer-derived quality metrics are inherited, not recomputed.