Source: https://guthlabs.ai/docs/instruments/metronome-click-track-export-tempo-map/mechanism/

instrument mechanism / verified-clean

# Metronome Click Track Export (Tempo Map) mechanism

The inspectable method record for Metronome Click Track Export (Tempo Map), kept separate from implementation and qualification.

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

## Model scope

The standard timing relationship is valid, but the instrument cannot be verified as fully defined with only BPM and bar-count segments. Add beats_per_bar/time_signature, BPM beat-unit semantics, initial time, boundary-inclusion rules, validation constraints, timestamp precision, and an explicit export schema. The empty honest_label is a concern: the UI should state that this generates beat-grid timestamps and tempo-map data, not synchronized audio or guaranteed DAW/video compatibility without a selected timebase and export format.

- The core duration formula is correct only when BPM means beats per minute of the stated beat unit: segment_duration_seconds=(60/BPM)*beats_in_segment.

- The inputs specify bar counts but omit beats per bar/time signature, so beats_in_segment cannot be determined from the stated inputs alone.

- The formula gives cumulative segment durations but does not explicitly define how to expand them into individual click timestamps, whether the initial timestamp is included, or whether a tempo-change boundary is emitted once or twice.

- The export tempo-map format and whether tempo changes occur exactly at the first beat of the next segment are unspecified.

## Units and conventions

- BPM is quarter-note beats per minute unless a time signature and beat unit are explicitly supplied.

- Time is measured in seconds and the initial click occurs at t=0.

- For these vectors, each segment has a stated beats_per_bar value; beats_in_segment=bar_count*beats_per_bar.

- A click is emitted at every beat, including the first beat at t=0, with no duplicate click at a segment boundary.

- Tempo changes take effect at the first beat of the following segment.

- The click grid uses the same beat unit as the BPM value; compound-meter conversion is not inferred automatically.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "segments": [
      {
        "bpm": 120,
        "bar_count": 2
      }
    ],
    "beats_per_bar": 4,
    "initial_time_seconds": 0
  },
  "expected_outputs": {
    "timestamps_seconds": [
      0,
      0.5,
      1,
      1.5,
      2,
      2.5,
      3,
      3.5
    ],
    "total_duration_seconds": 4,
    "tempo_map_events": [
      {
        "time_seconds": 0,
        "bpm": 120
      }
    ]
  },
  "working": "One beat lasts 60/120=0.5 seconds. Each segment contains 2*4=8 beats. Segment duration=(60/120)*8=0.5*8=4 seconds. Starting at t=0, the eight clicks are t=0, 0+0.5=0.5, 1.0, 1.5, 2.0, 2.5, 3.0, and 3.5 seconds. The next segment boundary and total duration are t=4.0 seconds."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The specification leaves beats-per-bar/time-signature semantics unspecified, creating different valid timestamp lists, and BPM = 0 causes an undefined division that must be rejected. The tempo-map boundary also requires explicit segment-switch semantics.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/metronome-click-track-export-tempo-map/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/metronome-click-track-export-tempo-map/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/metronome-click-track-export-tempo-map/qualification/>)

## Sources and evidence

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

- `VERIFIED_LEDGER.json`

- `evidence-tranche6/tranche6-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
