Source: https://guthlabs.ai/docs/instruments/dms-decimal-degrees/

instrument / verified-clean

# DMS ↔ Decimal Degrees

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/dms-decimal-degrees/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/dms-decimal-degrees/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/dms-decimal-degrees/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/dms-decimal-degrees/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-4

**Evidence ID**: t4-149

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The specification is ambiguous because it claims bidirectional conversion but supplies only a forward formula, and it does not define negative-coordinate conventions, accepted DMS syntax, normalization, or rounding. The blank honest_label should explicitly state that this is an angular-format converter, not a datum transformation, coordinate-reference-system conversion, or geodetic position calculation.

### Formula and scope findings

- The supplied formula only converts DMS to decimal degrees; no decimal-degrees-to-DMS formula is provided, despite the instrument claiming bidirectional conversion.

- For negative coordinates, `dd = d + m/60 + s/3600` is ambiguous and is incorrect if only the degrees component carries the negative sign. The standard signed interpretation is `dd = sign(d) * (abs(d) + m/60 + s/3600)` when minutes and seconds are nonnegative.

- DMS parsing syntax is unspecified: degree, minute, and second separators; whitespace; hemisphere suffixes; and whether signed minutes or seconds are accepted are all ambiguous.

- Valid-component constraints are missing. Standard normalized DMS requires 0 <= minutes < 60 and 0 <= seconds < 60, with degree sign or hemisphere carrying the sign.

- Decimal-to-DMS rounding, precision, and carry behavior are unspecified, including cases where rounded seconds become 60 or minutes become 60.

### Unit assumptions

- Degrees, minutes, and seconds are angular subdivisions: 1 degree = 60 minutes and 1 minute = 60 seconds.

- `m/60` and `s/3600` are degree quantities, so the output decimal value is in degrees.

- The test DMS values use nonnegative minutes and seconds; a negative coordinate applies its sign to the complete angular magnitude.

- Decimal-degree inputs are numeric angular values in degrees, not radians.

- The reverse conversion test assumes normalized output formatted as signed degrees-minutes-seconds with seconds allowed to contain a decimal fraction.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The extreme-magnitude vector exposes loss of the one-second fractional component when JavaScript Number arithmetic adds 1/3600 to 100000000000000000000. The negative-DMS vector also exposes an output-changing convention ambiguity unless the sign convention is explicitly defined.

## 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": {
    "dms": "40°26′46″"
  },
  "expected_outputs": {
    "decimal_degrees": 40.44611111111111
  },
  "working": "40 + 26/60 + 46/3600 = 40 + 0.4333333333333333 + 0.0127777777777778 = 40.44611111111111°"
}
````

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

- `BOUNDARY_HAZARD_CATALOG.json`
