Source: https://guthlabs.ai/docs/instruments/bpm-tap-tempo/

instrument / verified-clean

# BPM Tap Tempo

The current ledger marks this instrument verified clean within the source-bound verification corpus.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/bpm-tap-tempo/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/bpm-tap-tempo/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/bpm-tap-tempo/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/bpm-tap-tempo/qualification/>)

## Ledger state

The current ledger marks this instrument verified clean within the source-bound verification corpus.

**Area**: Audio, Music, Photography & Color

**Tranche**: tranche-4

**Evidence ID**: t4-073

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The BPM formula itself is correct under the stated millisecond assumption. Review is required to define the rolling-window size and startup behavior, specify timestamp units, define confidence/variance, and establish validation for duplicate, non-monotonic, insufficient, or zero-length intervals.

### Formula and scope findings

- BPM=60000/avg(interval_ms) is the standard formula when the average interval is expressed in milliseconds.

- The rolling-window size and policy are unspecified, including how many intervals are included and how startup windows are handled.

- The claimed confidence/variance output has no formula or definition, so it cannot be verified.

- The input timestamp unit is unspecified even though the formula requires intervals in milliseconds.

### Unit assumptions

- The constant 60000 is milliseconds per minute.

- Tap timestamps must be converted to milliseconds before interval averaging.

- Timestamps are assumed to be monotonically increasing.

- The average is the arithmetic mean of consecutive tap intervals in the selected rolling window.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

Coincident timestamps produce a zero denominator and therefore an undefined BPM, with no specified rejection behavior. The specification also leaves timestamp units and handling of out-of-order taps insufficiently defined, allowing materially different outputs.

## Errata and corrections

No applied erratum is attached to this unique-name record.

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "timestamps": [
      1000,
      1500,
      2000,
      2500
    ],
    "timestamp_unit": "ms"
  },
  "expected_outputs": {
    "BPM": 120
  },
  "working": "Intervals: 1500-1000=500 ms, 2000-1500=500 ms, 2500-2000=500 ms. Average interval=(500+500+500)/3=1500/3=500 ms. BPM=60000/500=120 BPM."
}
````

## Related workflows

[Music Timing & Pitch Kitfind tempo](<https://guthlabs.ai/docs/instrument-workflows/music-timing/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_CLEAN`

- `evidence-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
