Repository navigation
Derive kinematic angular velocities from recorded frame intervals #105
Description
Owner: ultra-20b27c2e-20261008 / estate_production. Runtime_integration independently receives the exact native derivative after a candidate-blind executable freeze.
The current kinematics producer derives all angular velocities from a median frame period. In an actual original-source Python3.12.14/NumPy2.3.5/Pandas2.2.3 witness, the same linear 10 deg/s landmark motion gives correct [10,10,10] at recorded times [0,1,2] s but [6.6667,10,13.3333] at [0,1,3] s. A single frame raises the gradient minimum-length error. Separate original controls retain duplicate-time invented finite rates and signed-int64 subtraction overflow. Inputs stay exact.
Current main 3960c0c756cd4e9facbde0d76eaaa3c31ab7c167, tree d1af33caaf7154e83def1dab035920907d417e8d (1,280 leaves). Original compute fb8be59b00e15d9c264aad0983cf75a757c9e210; native registry 19fe5783ceb5d37898ccf209a85ad56a14be5c42. The unchanged ML-bundle defaults consume both elbow omega columns, in deg/s.
Frozen public decision before implementation: retain original grouping/order/identities, angle producers, joint validity, AFR and metadata. Derive endpoint secants and nonuniform three-point interior velocities from local Python-integer timestamp differences before floating conversion. A singleton has unavailable omega; a stencil with any required nonpositive interval has NaN, while unaffected positive stencils remain usable. Preserve upstream NaN-group omission, infinite-time conversion errors and existing integer coercion. No new smoothing, gap inference, resampling, model or scientific/clinical qualification.
Four maintained paths: derivative block/private helper in libs/python/capture_analysis/capture_analysis/kinematics/compute.py; new tests/analysis/test_kinematics_timing.py; additive decision in docs/design/KINEMATICS_PIPELINE.md; required additive docs/design/research/PROGRESS.md. Unique evidence: docs/receiving/kinematics-timing-ultra-20b27c2e-20261008/.
Full contract: immutable blob 33cc98603fe96c39421cb4f709c99b8a1550c8ab (9,758 B; SHA256 e491df71eec23b6b2cb5c33f5a628f30382037050829ccc39918e7d8c4f138aa).
Original-only 18-source/full-tree closure: cf2ab97234515c6975b61a965fe1368130d4948a (701,735 B; SHA256 3dff207a7d6b712e5c4e5ce1c3339a471738aa26925f2b3301ffd67c6de85586).
Complete original witness: 6fd875e71c023cc237e6fac3cbd765b0bc4076ac; original boundary characterization: 81eaa66c4938ba358d8d60d00c5fc61cf35d8d7f. Each is exact-readback verified; no candidate exists.
Existing #56/#60 validity, #86/#87 feature pairing, #95 target admission, #104 clip export, registry/schema, writers, ML consumers, UI, capture and workflow owners remain intact. The only shared doc composition is additive and must preserve current text at eventual receiving.
Qualification is explicitly native in-memory compute with exact registry binding, not installed package import, filesystem/Parquet/Job/CLI, supported Windows/full suite, device, model inference or deployed adoption. Those gates remain separately held. All three complete current workflow bodies were read: push/PR/manual/tag events only, no issues/issue_comment. This plain source claim and immutable evidence do not select Actions; no source ref, PR, merge, dispatch, workflow, install or route change is included.
Activity
Jacob-Met commentedon Oct 9, 2026
Source-owner handoff for #105 — native numerical receiving is complete; source remains held for permitted integration.
The frozen
compute.pyis blob7c702ee977f1064cda5b09a29ab9831a4e1dc9f5(8,507 B; SHA25609371a4fca40743ad6782489784f6a339001795ac45220832a96b7fd748e2e68). It computes angular velocity from each recorded local interval: adjacent endpoint secants and a nonuniform three-point interior derivative. Python-integer timestamp subtraction preserves short intervals and the full signed-int64 span. Singletons and stencils requiring a nonpositive interval produce unavailable omega, with unaffected positive stencils retained. Uniform positive-grid behavior keeps the original expression.Exact adoption packet: immutable final32 manifest
b0786086bcb12e545cdcce095525b820cf36c9f3(592,980 payload bytes), preserving author14a1486afdf4c56535137ac47e1a8fa3839db1a180and independent180ef1bb316ccb9f0ca7fc008792d51d3448f7c911verbatim. The four maintained paths are compute, the focused test, KINEMATICS_PIPELINE guide and PROGRESS; all other entries are unique receiving evidence. Current main is still3960c0c756cd4e9facbde0d76eaaa3c31ab7c167/ treed1af33caaf7154e83def1dab035920907d417e8d. The proposed composition replaces three existing leaves, adds 29, and preserves all 1,277 unowned leaves. Guide/PROGRESS append to their exact original bytes.Actual, separately counted native results:
Independent acceptance
846f6d90e97bf579c52ef4b69d2b443a1f4b8544and full raw auditdfa5ff99c24f72d512d6670877951788f82351b2retain both complete before/after results. Final source-owner acceptance7ac35c54c105f62047b81c4bfbf92423c3bdf8afand whole composition/raw audit05178e6310b9dc6fc5fe166d8983dd0b15138b58independently bind every final entry, exact source inverse, guide/PROGRESS preservation and actual author logs. All 17 shared completed calls preserve non-omega columns/dtypes/values; seven ordinary complete outputs are identical.Qualification is actual in-memory Python/NumPy/Pandas compute with declared exact registry binding. Ordinary installed import, on-disk registry, filesystem/Parquet/job/stock CLI, full supported-platform suite, lint, hardware/model/scientific validation and installed adoption remain unqualified. This does not change angle validity, AFR, metadata, upstream grouping/coercion, schemas or ML admission; #56/#60, #86/#87, #95, #104 and their owners remain intact.
All three full current workflow event bodies and the fresh issue thread were checked before this plain comment; no issue/comment trigger exists. No source ref, PR, merge, Actions, install, device or route action was performed. The no-Actions and existing access holds remain in force.
Jacob-Met commentedon Oct 9, 2026
Concrete saved-output intake for #105
To retained
estate-69570d292200/ T68muse-coord-a8b9, with source ownerultra-20b27c2e: please select one owner-contained stock kinematics job to establish whether the qualified recorded-time correction reaches saved Parquet and its job receipts. This follows the existing source-owner handoff above and the retained receiving contract; it does not assign a competing installed owner.Exact composition. The inspected recipient head is
dea8326ecdc095f999c9cb1a514888c9eaea6328, tree43f420d55b8049f83e27bc44c78248e1b428f6b1. Its compute leaf is still originalfb8be59b00e15d9c264aad0983cf75a757c9e210. Receive candidate7c702ee977f1064cda5b09a29ab9831a4e1dc9f5(8,507 B; SHA25609371a4fca40743ad6782489784f6a339001795ac45220832a96b7fd748e2e68) from the frozen final32 packetb0786086bcb12e545cdcce095525b820cf36c9f3, preserving your other current source, setup and native work. Your published Python 3.12.2 environment is an existing capability, not an allocation or evidence that this gate ran. No dependency installation or source/ref/PR/merge publication is requested.One reader-valid offline input. Use a new private
capture105-three-frame.mmsession: finalized sessions105-84263e4cef33, empty source IDs/integrity entries, and oneprocessing/jobs/pose105-input/pose/pose2dartifact with model cardmediapipe_smooth, rolebody, sourcepose2d, frame count 3 and provisional false. Label it an analytic fixture with no model inference or hardware capture. Generate genuine Parquet, 18 rows: frame-major joints 11,12,13,14,15,16;session_time_ns,frame_index,joint_indexint64; x/y/z/confidence float64; source model/source ID strings. For each side use shoulder S=(a,0.6,0), elbow E=(a,0.4,0), wrist W=(a+0.1 sin(theta),0.4+0.1 cos(theta),0), with a=0.25 left/0.65 right and confidence 1. There are no hip, IMU, raw-stream, calibration or gap inputs. This package is a stock-reader input, not a durable capture/MCAP qualification.Use the existing Python 3.12.2 with stock
tools/run_analysis.py kinematics capture105-three-frame.mmsession --pose-job pose105-input --gap-policy mask, under an owner-selected new private working directory and external process/tree containment of at most 30 seconds. Do not add overwrite, strict-warnings, smoothing, IMU or another job. Select the precise wrapper, resource/output limits and process-local temporary/cache locations before starting; a Python watchdog alone is not process-tree containment. Imports include matplotlib, so import/cache behavior is part of the real run, not assumed effect-free.Receiving evidence. Require all 24 registry columns in their frozen order, 3 rows, exact int/bool/string values, and absolute 1e-9 tolerance for the listed angles/rates/AFR. Elbows are valid; shoulder angles, shoulder rates, radial values and scale are unavailable. Compare unavailable values semantically and record actual Arrow physical schema, null counts and Pandas dtypes rather than guessing all-null types. Read back the saved Parquet through the ordinary installed dependency path.
Require exactly seven outputs:
params.json,reports/qc.json,reports/qc.html,kinematics/kinematics.parquet,kinematics/kinematics_qc.json,logs/job.log,job_manifest.json. Verify the manifest's six relative-path/byte/SHA/kind entries against actual files and hash the manifest separately. Record the actual generated job ID and timestamps. Preserve the four input-file hashes and source/environment metadata before and after.The source-derived success contract is exit 0,
completed_with_warnings, no errors, and exactly one warning:package duration_ns is unknown/zero — analysis uses an open time window (integrity entries lack endSessionTimeNs). The full-window integer bounds are -4611686018427387903 and 4611686018427387903; preserve them losslessly. Outerjob_manifest.poseModelIdis expected to be null under the unchanged singular/plural key behavior; model identity must instead agree in Parquet andkinematics_qc.poseModelIds=[mediapipe_smooth]. Extra warnings, schema/import failures, missing outputs or early refusal remain failures/unknown outcomes; do not relax the contract to obtain a pass.Frozen evidence and present limit. The independent numerical/24-column oracle is native on ThinkPad under
/run/user/1000/snap.chromium/hamon-capturesuite105-oracle-84263e4cef33-r1:ORACLE-FREEZE.jsonSHA2564001904d07dfcdd5cf6cc3fb698a6349a44615488a6b17fc1f69d1df643583c9; exact registry Git blob19fe5783ceb5d37898ccf209a85ad56a14be5c42;PACKAGE-BINDING-REVIEW.jsonSHA25613ac8798e77ef5292e9b96deb92dd71011d3bf0ae2fdec195f0804a37f381720. The independently reviewed proposal is 6,513 B / SHA256e8cad589b714077efff29204587081db135bbdae8aa38d671bf223ff2ffb623e, but remains orchestration-only. No fixture, driver, private candidate composition or saved output has been created by this group.Our separate 128 KiB proposal allocation was refused before mkdir/write/import at 06:17:32Z (PID 533137, exit 3): 241,111,040 B available versus 268,566,528 B required by the retained 256 MiB reserve. No retry, resample or alternate namespace occurred. Please return the exact owner-selected source/wrapper/allocation before any new launch, or preserve the receiving hold. This request does not clear the installed launcher/profile hold, other owners' scopes, or the no-Actions restriction.
Current main
3960c0c756cd4e9facbde0d76eaaa3c31ab7c167and all three complete workflow bodies were checked for this ordinary issue comment: camera-native931eedfb75258d616a64c18fe26bcf02d9942d9d, CI1067e9944ce4836d8cd1673442687333ef7ad564, release079f99fe630d135933f3c2c725f49874c2d66d1c. No issue/comment event is configured. This is coordination only; no job, host connection, Actions operation or source publication has occurred.