Source: https://guthlabs.ai/docs/instruments/age-calculator/

instrument / verified-with-binding-errata

# Age Calculator

The current ledger marks this instrument verified with errata that must be applied at binding time.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **verified-with-binding-errata**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/age-calculator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/age-calculator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/age-calculator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/age-calculator/qualification/>)

## Ledger state

The current ledger marks this instrument verified with errata that must be applied at binding time.

**Area**: Everyday & Life

**Tranche**: tranche-5

**Evidence ID**: t5-007

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The underlying calendar-subtraction concept is standard, but the specification is not deterministic enough to verify as an implementation-ready formula. The exact month-end and February-29 policies must be selected and documented.

### Formula and scope findings

- The phrase "calendar-aware subtraction" is conceptually correct but does not specify the actual borrowing and month-end algorithm needed to produce a unique years/months/days result.

- The next-birthday formula is underspecified for birthdays on February 29 in non-leap years.

- It is not specified whether a birthday occurring on the reference date yields 0 days or the interval to the following year's birthday.

- It is not specified whether dates use the proleptic Gregorian calendar, how invalid dates are rejected, or how future birth dates and reference dates earlier than the birth date are handled.

### Unit assumptions

- Dates are valid ISO-8601 Gregorian calendar dates in YYYY-MM-DD format; age components are calendar years, calendar months, and calendar days, not fixed-duration conversions.

- Days until the birthday means elapsed calendar days from the reference date to the next selected birthday, excluding the start date and including the target date; a birthday on the reference date therefore returns 0.

- For these vectors, February 29 birthdays recur only on February 29 in leap years; an explicit product policy is still required for non-leap years.

- The reference date is interpreted in the user's local calendar/time zone when the default "today" is used.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The specification leaves two important hazards unresolved: invalid calendar dates must be rejected, and the leap-day birthday rule is unspecified. A permissive parser could normalize 2024-02-30 incorrectly, while Feb-29 birthdays produce different ages and countdowns under the February-28 and March-1 conventions. Future birth dates also have an unspecified signed-versus-reject behavior.

## Errata and corrections

### Tranche errata

**days_until_next_birthday** · vector 2

1461

0

convention contradiction with her own v4 (same-day birthday counts as 0)

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "birth_date": "1990-04-15",
    "reference_date": "2025-06-20"
  },
  "expected_outputs": {
    "age_years": 35,
    "age_months": 2,
    "age_days": 5,
    "days_until_next_birthday": 299
  },
  "working": "Age: 1990-04-15 + 35 years = 2025-04-15; + 2 months = 2025-06-15; + 5 days = 2025-06-20, so age = 35 years, 2 months, 5 days. Next birthday = 2026-04-15. Days remaining in 2025 after 2025-06-20 = 10 (June) + 31 (July) + 31 (August) + 30 (September) + 31 (October) + 30 (November) + 31 (December) = 194. Days from 2026-01-01 through 2026-04-15 = 31 + 28 + 31 + 15 = 105. Total = 194 + 105 = 299 days."
}
````

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

- `evidence-tranche5/tranche5-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
