Source: https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/

instrument / verified-clean

# Haversine Sunrise-Azimuth Bearing (great circle course)

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/haversine-sunrise-azimuth-bearing-great-circle-course/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/qualification/>)

## Ledger state

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

**Area**: Earth & Space (astronomy, orbital mechanics, meteorology, geology, geodesy, oceanography)

**Tranche**: tranche-5

**Evidence ID**: t5-109

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The specification cannot honestly advertise both initial and final bearing: only initial bearing is defined by the supplied formula. Add a separate final-bearing formula, specify degree/radian input and output units, define normalization and spherical-Earth assumptions, and remove or rename the unsupported sunrise-azimuth claim.

### Formula and scope findings

- The supplied formula is the standard initial great-circle bearing formula only; it does not compute the claimed final bearing.

- The instrument name claims sunrise azimuth, but no sunrise or solar-position formula is supplied.

- The formula is spherical, not an ellipsoidal geodesic bearing formula; the spherical-Earth approximation must be disclosed.

- The formula is not a haversine formula. Haversine is normally used for great-circle distance, whereas this formula computes an initial bearing.

- The output angle must be normalized explicitly, conventionally to [0,360) degrees or [0,2π) radians; the formula alone can return negative angles.

### Unit assumptions

- lat1, lon1, lat2, and lon2 must be angular coordinates, with all trigonometric arguments and Δλ converted to radians before evaluation.

- Reported bearings are assumed clockwise from true north and normalized to [0,360) degrees.

- The supplied formula computes initial bearing as atan2(y,x).

- Final bearing would require an additional calculation, such as final=(initial bearing from point 2 to point 1 + 180) mod 360.

- A spherical Earth is assumed; no ellipsoid or datum is specified.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

Coincident points produce atan2(0,0), so both bearings are undefined and must be rejected. The specification also leaves longitude sign, angular units, bearing normalization, and the final-bearing derivation implicit, creating convention-dependent outputs if those conventions are not fixed.

## 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": {
    "lat1": 0,
    "lon1": 0,
    "lat2": 0,
    "lon2": 90,
    "coordinate_units": "degrees"
  },
  "expected_outputs": {
    "initial_bearing_deg": 90,
    "final_bearing_deg": 90
  },
  "working": "Δλ=90°=π/2; φ1=φ2=0°=0 rad. y=sin(π/2)·cos(0)=1·1=1. x=cos(0)·sin(0)−sin(0)·cos(0)·cos(π/2)=0−0=0. θ=atan2(1,0)=π/2=90°. For the final bearing, reverse the route: bearing(0°,90°→0°,0°)=270°, then (270°+180°) mod 360°=90°."
}
````

## Related workflows

No source-defined multi-instrument workflow membership is recorded.

## 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-tranche5/tranche5-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
