Source: https://guthlabs.ai/docs/instruments/reading-time-estimator/

instrument / verified-clean

# Reading Time Estimator

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

## Ledger state

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

**Area**: Everyday & Life

**Tranche**: tranche-5

**Evidence ID**: t5-051

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The arithmetic formula is valid, but the instrument needs an exact default WPM and an explicit text-tokenization rule before its behavior is fully specified. The interface should label the result as an estimate and state that individual reading speed varies widely; the existing honest_label addresses this concern but should be shown near the result.

### Formula and scope findings

- The formula time_min = word_count / wpm is standard and correct when word_count is measured in words and wpm means words per minute.

- The pasted-text path is underspecified: the spec does not define how words are tokenized, including punctuation, hyphenated terms, contractions, numbers, whitespace, or empty text.

- The stated default WPM of approximately 200-250 is a range rather than a single deterministic default, so the estimator cannot produce one reproducible result until an exact default is selected.

### Unit assumptions

- word_count is a nonnegative count of words.

- wpm is strictly greater than zero and has units of words per minute.

- time_min is reported in minutes; seconds, if displayed, are calculated as time_min × 60.

- For text inputs, the test vector assumes whitespace-delimited word counting with punctuation attached to words and no special tokenization rules.

## Boundary hardening

### Recorded hazards

- Division by zero occurs if wpm is 0; reject zero before calculation.

- Negative WPM is invalid and should be rejected.

- Negative word counts are invalid and should be rejected.

- Text word-counting behavior is ambiguous unless tokenization rules are explicitly defined.

- Very short texts can produce fractional minutes and should not be rounded to whole minutes before converting to seconds.

- A selected default must be an exact positive number, not the range 200-250.

## 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": {
    "word_count": 500,
    "wpm": 250
  },
  "expected_outputs": {
    "time_min": 2,
    "time_seconds": 120
  },
  "working": "time_min = word_count / wpm = 500 / 250 = 2 minutes. time_seconds = 2 × 60 = 120 seconds."
}
````

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