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

instrument mechanism / verified-with-binding-errata

# Age Calculator mechanism

The inspectable method record for Age Calculator, kept separate from implementation and qualification.

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

## Model scope

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.

- 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.

## Units and conventions

- 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.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "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."
}
````

## Failure boundary

**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.

## Other records

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

- `BOUNDARY_HAZARD_CATALOG.json`
