Source: https://guthlabs.ai/docs/instruments/kaplan-meier-survival-curve-plotter/mechanism/

instrument mechanism / verified-clean

# Kaplan-Meier Survival Curve Plotter mechanism

The inspectable method record for Kaplan-Meier Survival Curve Plotter, kept separate from implementation and qualification.

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

## Model scope

The product-limit estimator is the correct standard nonparametric method for right-censored time-to-event data, subject to the stated risk-set and tie-handling conventions. The specification needs explicit definitions for tie ordering, step-function convention, median behavior when not reached, input validation, and time units before implementation can be verified as deterministic.

- The product-limit formula is standard, but it must be applied at each distinct event time using ni equal to the number at risk immediately before that time and di equal to the number of events at that time.

- The specification does not define how tied events and censorings are ordered. A conventional rule is to count tied events before removing tied censorings from the risk set.

- The median-survival algorithm is unspecified. It should be defined as the first event time at which S(t) is less than or equal to 0.5, with median reported as undefined or not reached when the curve never reaches 0.5.

- The specification does not state whether the plotted step function is right-continuous, although the test vectors below use the post-event value at each event time.

## Units and conventions

- All times within one input dataset must use the same unit; the output curve and median use that same unit.

- A status flag of 1 means an observed event and 0 means right-censoring.

- The risk set ni includes subjects who are still event-free and uncensored immediately before the event time.

- For ties, events are processed before censorings at the same time.

- Time values are nonnegative and are interpreted as elapsed time from a common origin.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "observations": [
      {
        "time": 2,
        "status": 1
      },
      {
        "time": 3,
        "status": 0
      },
      {
        "time": 5,
        "status": 1
      },
      {
        "time": 7,
        "status": 1
      },
      {
        "time": 8,
        "status": 0
      }
    ],
    "time_unit": "days",
    "sampled_times": [
      0,
      2,
      3,
      5,
      6,
      7,
      8
    ]
  },
  "expected_outputs": {
    "sampled_survival_points": [
      {
        "time": 0,
        "survival": 1
      },
      {
        "time": 2,
        "survival": 0.8
      },
      {
        "time": 3,
        "survival": 0.8
      },
      {
        "time": 5,
        "survival": 0.5333333333333333
      },
      {
        "time": 6,
        "survival": 0.5333333333333333
      },
      {
        "time": 7,
        "survival": 0.2666666666666667
      },
      {
        "time": 8,
        "survival": 0.2666666666666667
      }
    ],
    "median_survival_time": 7,
    "key_curve_features": {
      "roots": [],
      "extrema": {
        "maximum": 1,
        "minimum": 0.2666666666666667
      },
      "terminal_plateau": 0.2666666666666667,
      "asymptotes": [],
      "intersections": []
    }
  },
  "working": "Sorted observations: event at 2, censor at 3, event at 5, event at 7, censor at 8. At t=2, n1=5 and d1=1: S(2)=1*(1-1/5)=4/5=0.8. The censoring at 3 removes one subject but does not change survival. At t=5, n2=3 and d2=1: S(5)=0.8*(1-1/3)=0.8*(2/3)=0.5333333333333333. At t=7, n3=2 and d3=1: S(7)=0.5333333333333333*(1-1/2)=0.2666666666666667. The curve first reaches <=0.5 at t=7, so the median is 7 days. There are no roots or curve intersections."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

A malformed dataset can create an event with an empty risk set and a zero denominator, producing an undefined survival estimate. The specification does not state a required rejection behavior. Median survival is also convention-dependent at the exact 0.5 threshold, and status-code conventions are not specified.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/kaplan-meier-survival-curve-plotter/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/kaplan-meier-survival-curve-plotter/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/kaplan-meier-survival-curve-plotter/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-tranche6/tranche6-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
