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

instrument mechanism / verified-clean

# Haversine Sunrise-Azimuth Bearing (great circle course) mechanism

The inspectable method record for Haversine Sunrise-Azimuth Bearing (great circle course), kept separate from implementation and qualification.

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

## Model scope

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.

- 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.

## Units and conventions

- 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.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "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°."
}
````

## Failure boundary

**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.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/haversine-sunrise-azimuth-bearing-great-circle-course/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-tranche5/tranche5-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
