Source: https://guthlabs.ai/docs/instruments/stair-rise-run-designer/

instrument / verified-clean

# Stair Rise & Run Designer

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

## Ledger state

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

**Area**: Everyday & Life

**Tranche**: tranche-4

**Evidence ID**: t4-043

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The core riser arithmetic and Pythagorean stringer formula are standard once total_run and units are explicitly defined. The specification cannot receive PASS because total_run, comfort tolerance, minimum stair size, and post-rounding validation are unresolved. The honest-label warning to verify local building code is appropriate but does not replace those constraints.

### Formula and scope findings

- total_run is used in the stringer-length formula but is never defined. If there are num_steps risers and the upper floor is the landing, total_run is typically tread_depth × (num_steps - 1); using tread_depth × num_steps produces a different result.

- The comfort check uses an undefined approximation tolerance. The test vectors interpret it as inclusive 24.0–25.0 inches, but the specification does not state that rule.

- round(total_rise/target_riser) can produce zero, causing division by zero in actual_riser. Inputs need constraints such as total_rise > 0, target_riser > 0, and the rounded step count >= 1.

- The formula does not require validation of the resulting actual_riser and tread_depth after rounding, even though those values—not the desired riser—must be checked against the stated code-reference ranges.

- A one-riser result can produce zero horizontal run under the usual num_steps - 1 tread convention; a minimum of two risers or an explicit stair-layout rule is needed.

### Unit assumptions

- All numeric test-vector dimensions are inches unless otherwise stated; total_rise, desired_riser, and tread_depth must use the same unit.

- The calculations assume positive values and JavaScript-style rounding for positive numbers, equivalent to Math.round.

- For stringer length, total_run is assumed to be tread_depth × (num_steps - 1), treating the upper floor as the final landing.

- The comfort flag is interpreted as true when 24.0 <= (2 × actual_riser + tread_depth) <= 25.0 inches.

- The code-reference flag is interpreted as true when 7.0 <= actual_riser <= 7.75 inches and tread_depth >= 10.0 inches; actual jurisdictional code requirements may differ.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

A zero total rise produces num_steps = 0 and then actual_riser = 0/0, an undefined result; the instrument must reject this input before division. Negative tread depth also exposes an unspecified sign convention and can produce a misleading comfort result unless rejected or converted to a magnitude.

## 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": {
    "total_rise": 108,
    "desired_riser": 7.5,
    "tread_depth": 10.5,
    "units": "in"
  },
  "expected_outputs": {
    "step_count": 14,
    "actual_riser": 7.7142857143,
    "run": 10.5,
    "total_run": 136.5,
    "stringer_length": 174.05818,
    "comfort_flag": false,
    "code_range_flag": true
  },
  "working": "108 / 7.5 = 14.4; round(14.4) = 14 steps. Actual riser = 108 / 14 = 7.7142857143 in. Run per tread = 10.5 in. Total run = 10.5 × (14 - 1) = 10.5 × 13 = 136.5 in. Stringer = sqrt(108² + 136.5²) = sqrt(11664 + 18632.25) = sqrt(30296.25) = 174.058180 in. Comfort value = 2 × 7.7142857143 + 10.5 = 25.9285714286 in, so comfort_flag = false. Code range: 7.0 <= 7.7142857143 <= 7.75 and 10.5 >= 10, so code_range_flag = true."
}
````

## Related workflows

[Home Renovation Estimatorstairs](<https://guthlabs.ai/docs/instrument-workflows/home-reno/>)

## 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`
