Source: https://guthlabs.ai/docs/instruments/roof-pitch-rafter-calculator/mechanism/

instrument mechanism / verified-clean

# Roof Pitch & Rafter Calculator mechanism

The inspectable method record for Roof Pitch & Rafter Calculator, kept separate from implementation and qualification.

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

## Model scope

The core pitch and angle relationships are standard, subject to consistent units and degree conversion. The stated rafter formula is conditionally valid only when overhang is measured along the slope. Clarify span-versus-run handling, overhang measurement direction, pitch formatting, and the undefined material-needed feature before release.

- The rafter_length formula is only correct if overhang is measured along the sloped rafter. If overhang is horizontal, the formula must instead use sqrt((run + overhang)^2 + rise^2), or an equivalent geometry calculation.

- The input may be span or run, but the formula requires run. For a symmetrical gable roof, run is normally span / 2; that conversion and the roof configuration are not specified.

- The instrument claims to compute material needed, but no material-quantity formula, waste allowance, spacing, or output definition is provided.

- The pitch output format is ambiguous: rise/run produces a numeric ratio such as 0.5, while the example implies a normalized roof pitch such as 6:12.

- The angle formula atan(rise/run) is correct for an angle in radians; degrees require multiplying the result by 180/pi, which is not stated explicitly.

## Units and conventions

- rise and run must use the same linear units before division or square-root calculation.

- The examples below treat overhang as a length measured along the sloped rafter, because that is the only interpretation under which the stated rafter_length formula is correct.

- For a symmetrical roof supplied by span, run is assumed to be span / 2.

- Angle output is in degrees: atan(rise/run) * 180 / pi.

- Pitch is reported both as a numeric ratio and as a normalized ratio with denominator 12 where applicable.

- The metric test vector uses millimetres consistently; no automatic unit conversion is assumed.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "run": 12,
    "rise": 6,
    "overhang": 1,
    "unit": "ft"
  },
  "expected_outputs": {
    "pitch_ratio": 0.5,
    "pitch_label": "6:12",
    "angle_degrees": 26.565051,
    "rafter_length": 14.416408,
    "length_unit": "ft"
  },
  "working": "pitch = rise / run = 6 / 12 = 0.5, so the normalized label is 0.5 * 12 = 6, or 6:12. angle = atan(0.5) * 180 / pi = 26.565051 degrees. Base rafter = sqrt(12^2 + 6^2) = sqrt(144 + 36) = sqrt(180) = 13.416408 ft. Rafter length = 13.416408 + 1 = 14.416408 ft."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The stated formula has an undefined division when run = 0, and the span-versus-run input representation creates a branch where identical numeric dimensions produce different results. Negative overhang also exposes an unresolved sign convention.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/roof-pitch-rafter-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/roof-pitch-rafter-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/roof-pitch-rafter-calculator/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-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
