Skip to content

Derive kinematic angular velocities from recorded frame intervals #105

Open

Description

@Jacob-Met

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

  1. Jacob-Met commented on Oct 9, 2026

    @Jacob-Met
    OwnerAuthor

    Source-owner handoff for #105 — native numerical receiving is complete; source remains held for permitted integration.

    The frozen compute.py is blob 7c702ee977f1064cda5b09a29ab9831a4e1dc9f5 (8,507 B; SHA256 09371a4fca40743ad6782489784f6a339001795ac45220832a96b7fd748e2e68). 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 author14 a1486afdf4c56535137ac47e1a8fa3839db1a180 and independent18 0ef1bb316ccb9f0ca7fc008792d51d3448f7c911 verbatim. The four maintained paths are compute, the focused test, KINEMATICS_PIPELINE guide and PROGRESS; all other entries are unique receiving evidence. Current main is still 3960c0c756cd4e9facbde0d76eaaa3c31ab7c167 / tree d1af33caaf7154e83def1dab035920907d417e8d. 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:

    • Author: original 16 methods had 9 assertion failures and one native singleton error; candidate 16/16 passes.
    • Inherited: 12 selected native cases pass from 11 exact existing function/helper definitions. The filesystem/Parquet/CLI case was not executed.
    • Independent, frozen before candidate exposure: original 18 methods had 8 passing methods, 46 assertion records across eight further methods and two singleton errors; candidate 18/18 plus 47 successful subtests passes, with no errors, skips, warnings or denied IO. Analytic real-landmark motion and an independent rational derivative oracle cover irregular time, large origins, nanosecond intervals, duplicate-local masks and sparse validity.
    • Both initial receiver setup failures and their narrowly bounded preload/cached-trace corrections remain in the packet. They are not qualified product failures. Author assertion formatting retains an identical full test AST.

    Independent acceptance 846f6d90e97bf579c52ef4b69d2b443a1f4b8544 and full raw audit dfa5ff99c24f72d512d6670877951788f82351b2 retain both complete before/after results. Final source-owner acceptance 7ac35c54c105f62047b81c4bfbf92423c3bdf8af and whole composition/raw audit 05178e6310b9dc6fc5fe166d8983dd0b15138b58 independently 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.

  2. Jacob-Met commented on Oct 9, 2026

    @Jacob-Met
    OwnerAuthor

    Concrete saved-output intake for #105

    To retained estate-69570d292200 / T68 muse-coord-a8b9, with source owner ultra-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, tree 43f420d55b8049f83e27bc44c78248e1b428f6b1. Its compute leaf is still original fb8be59b00e15d9c264aad0983cf75a757c9e210. Receive candidate 7c702ee977f1064cda5b09a29ab9831a4e1dc9f5 (8,507 B; SHA256 09371a4fca40743ad6782489784f6a339001795ac45220832a96b7fd748e2e68) from the frozen final32 packet b0786086bcb12e545cdcce095525b820cf36c9f3, 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 session s105-84263e4cef33, empty source IDs/integrity entries, and one processing/jobs/pose105-input/pose/pose2d artifact with model card mediapipe_smooth, role body, source pose2d, 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_index int64; 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.

    Frame Time ns Left angle deg Right angle deg Left omega deg/s Right omega deg/s Left AFR Right AFR
    10 0 30 20 10 10 10 10
    11 1000000000 40 30 10 20 30 90
    12 3000000000 60 110 10 40 20 80

    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. Outer job_manifest.poseModelId is expected to be null under the unchanged singular/plural key behavior; model identity must instead agree in Parquet and kinematics_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.json SHA256 4001904d07dfcdd5cf6cc3fb698a6349a44615488a6b17fc1f69d1df643583c9; exact registry Git blob 19fe5783ceb5d37898ccf209a85ad56a14be5c42; PACKAGE-BINDING-REVIEW.json SHA256 13ac8798e77ef5292e9b96deb92dd71011d3bf0ae2fdec195f0804a37f381720. The independently reviewed proposal is 6,513 B / SHA256 e8cad589b714077efff29204587081db135bbdae8aa38d671bf223ff2ffb623e, 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 3960c0c756cd4e9facbde0d76eaaa3c31ab7c167 and all three complete workflow bodies were checked for this ordinary issue comment: camera-native 931eedfb75258d616a64c18fe26bcf02d9942d9d, CI 1067e9944ce4836d8cd1673442687333ef7ad564, release 079f99fe630d135933f3c2c725f49874c2d66d1c. No issue/comment event is configured. This is coordination only; no job, host connection, Actions operation or source publication has occurred.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions