# REGAL Trial Reverse-Engineering Model — Documentation

**Subject:** SELLAS Life Sciences (NASDAQ: SLS) Phase 3 REGAL trial (NCT04229979) of
galinpepimut-S (GPS) vs best available therapy (BAT) as maintenance in AML second complete
remission (CR2), non-transplant.

**Purpose:** Reconstruct what the *blinded, publicly disclosed* trial data imply about the
probability of a positive readout, by (1) calibrating the pooled (both-arm) survival curve to the
disclosed death-event milestones, (2) decomposing it into arm-level survival under explicit
assumptions, and (3) Monte-Carlo simulating the trial's pre-specified test to get a probability of
statistical success. The **headline** is the **plateau (GPS-cure)** probability of success. The
**second panel is a null test, not a co-equal probability**: it holds the **BAT arm bit-for-bit
identical** to the plateau panel and swaps **only the GPS responder component** — a durable-remission
cure versus a fitted heavy-tailed Weibull with **no cure** — to ask whether the milestone plateau
*requires* a GPS-specific durable benefit, or whether BAT's own (venetoclax-driven) plateau plus a GPS
heavy tail can explain it. GPS immunological non-responders track the Observation row in **both** panels.
The null returns a **three-state verdict**: **A — rejected (non-identified)** when a no-cure GPS fit runs
to a parameter boundary (a de-facto cure is required); **B — rejected (inconsistent)** when it cannot
match the milestones; or **C — not excluded** when a no-cure GPS heavy tail *also* fits the milestones
given this BAT. Only State C carries a second P(success), reported as the "GPS cure not required" bracket.
State C is **conditional on crediting BAT** at the chosen component medians/cures — the bear presets and
selection slider are the intended stress controls on that structure.

**Deliverables:** `regal_explorer.html` (self-contained interactive explorer) and
`regal_explorer.py` (the same engine in Python, with a CLI summary and a 9-panel figure).

**Last updated:** 2026-07-02 · **Status:** research/analysis tool, not investment advice.

---

## 0. Epistemic frame (read first)

The single most important structural fact: **REGAL is blinded.** Public disclosures give the
*pooled* number of deaths at several dates, never the per-arm split. Consequently:

- The **pooled survival curve is identifiable** from the event milestones + the enrollment curve.
- The **decomposition into GPS and BAT arms is *not* identifiable** from blinded data. It requires
  an assumption about one arm (here: the BAT/control arm). Every "P(success)" number this model
  produces is therefore a function of an explicit, user-controlled **BAT-quality prior**, not a
  claim to know the confidential outcome.

This is a forecast built from public information (press releases, SEC filings, ClinicalTrials.gov,
the published trial-design paper) — the same class of event-driven analysis used in mainstream
biotech equity research. It does not access, infer, or attempt to unblind confidential trial data.

A recurring finding (Section 6): because the blinded data only pin the *pooled* curve, every
structural refinement we add to the arms — component-mixture BAT, immunological non-responders —
gets **absorbed by the pooled fit and barely moves the answer.** The one thing that materially
moves P(success) is whether the pooled *plateau* is real — and, specifically, whether it is
*GPS-specific*. The explorer makes this concrete with a **null test** (Sections 4.7, 7): it holds BAT
identical and asks whether the milestone plateau can be reproduced *without* a GPS cure (a no-cure GPS
heavy tail on top of BAT's own plateau), returning a three-state verdict rather than a rival percentage.

---

## 1. Module map

The tool is a single engine, delivered in two equivalent forms:

| File | Role | Key outputs |
|------|------|-------------|
| `regal_explorer.html` | Self-contained interactive explorer (no build, no dependencies): sliders for BAT composition, venetoclax cure, enrollment selection (eligibility filter), non-responder fraction, enrollment median timing, natural (non-disease) death rate, loss-to-follow-up, the no-GPS-cure test's GPS tail shape s<sub>G</sub> (fitted by default, with a manual override), and per-component shape k, plus an interim futility-HR consistency check and a weighted/unweighted fit toggle; the plateau P(success), the no-GPS-cure three-state verdict, and a "Trial dynamics" panel of live charts (survival curves, event-accrual timeline, simulated-HR distribution, GPS-cure-vs-no-GPS-cure divergence band, enrollment validation, a P(success)-vs-effect power curve, and a BAT-median-&-cure-vs-selection sweep). | plateau P(success), median HR, implied interim HR, per-arm alive-at-80th, GPS-median Poisson CI, fit-check, the null verdict (A/B/C), per-arm curves |
| `regal_explorer.py` | The same engine in Python (`bat_arm`, `build_plateau`, `build_no_gps_cure`, `mc`), with a CLI summary across the five BAT presets and a 9-panel figure (`regal_explorer_panel.png`). | plateau P(success) + null-verdict table, preset/non-responder sweeps, 9-panel figure |

Both share one enrollment reconstruction, one set of survival primitives, the same significance
threshold (Section 2.1), and — critically — **one shared BAT arm** (`bat_arm`): the plateau and null
panels consume byte-identical BAT (same per-component medians, cures, shapes, and left-truncation
selection), so they are literally **one biological lever apart**. Both are fit to the **identical
milestones**; they differ only in the GPS **responder** component:

- **`build_plateau` — plateau (GPS cure).** The shared BAT plus GPS responders modelled as a Weibull
  **cure-mixture**. Only the GPS responder cure `π_resp` is fit to the events; the BAT arm is fixed by
  the component medians plus enrollment selection (Sections 4.3–4.4). This is the **headline**.
- **`build_no_gps_cure` — no-GPS-cure null.** The **same** BAT; GPS responders swap the cure-mixture
  for a **no-cure Weibull** with two fitted parameters — a GPS responder median `m_G` and a tail shape
  `s_G` (GPS non-responders still track Observation). BAT is *fixed on purpose* here (Section 3). The
  fit yields a three-state verdict; on a parameter boundary the null is *rejected* (Section 4.7).

---

## 2. Input parameters and their sources

Notation: **[S]** = directly sourced from a public disclosure (see References);
**[A]** = analyst assumption (with the literature anchor that informs it);
**[D]** = derived/calibrated by the model from sourced inputs.

### 2.1 Trial design & statistical analysis plan (SAP)

| Parameter | Value | Type | Source / reasoning |
|-----------|-------|------|--------------------|
| Patients enrolled (N) | 126 (1:1 → 63 GPS / 63 BAT) | [S] | SELLAS disclosures; reiterated in the May 2026 conference coverage [R7]. |
| Primary endpoint | Overall survival (OS) | [S] | Trial-design paper [R1]; interim coverage [R4][R5]. |
| Interim analysis | 60 deaths (efficacy/futility/safety) | [S] | SAP amendment, Nov 2022 [R2]; design paper [R1]. |
| Final analysis trigger | 80 deaths (63.5% of 126) | [S] | SAP amendment [R2]; Q1-2026 8-K [R6]. |
| Primary test | **Stratified Cox PH model**, treatment as only covariate, H0: HR ≥ 1 vs H1: HR < 1 | [S] | Design paper [R1] (explicit). |
| Alpha | **one-sided 0.025** | [S] | Design paper [R1]. |
| Alpha spending | Lan–DeMets **O'Brien–Fleming**, one interim at 60 deaths | [S] | Design paper [R1]; OncLive [R5]. |
| Stratification factors | CR2 vs CR2p; cytogenetic risk; MRD status; CR1 duration (<1 yr vs ≥1 yr) | [S] | Targeted Oncology [R4]. |
| Design effect size | HR 0.636 ⇒ medians 12.6 mo (GPS) vs ~8.0–8.1 mo (BAT) | [S] | SAP/IR [R2]; conference coverage states 12.6 vs 8.1 mo [R7]. |
| **Significance threshold used in code** | observed HR ≤ **0.636**, i.e. z_crit = \|ln 0.636\|·√80 / 2 = **2.024** (one-sided p ≈ 0.0215) | [D] | Derived from N, 80 events, and one-sided 0.025 with a small OBF interim spend; matches SELLAS's stated 0.636. |
| BAT-arm allowed agents | observation/hydroxyurea, hypomethylating agents (HMA), venetoclax, low-dose ara-C (LDAC); targeted maintenance (e.g. FLT3i) **excluded** | [S] | Targeted Oncology [R4]; OncLive [R5]. |

> **Note on the threshold.** The log-rank test is the score test of the Cox model, so the
> Monte-Carlo significance decision (`score_z > z_crit`) is the operating characteristic of the
> trial's *actual* pre-specified test. A fully-iterated Cox MLE differs from the one-step estimate
> by ≤0.001 in HR here (balanced 1:1, single covariate), so the approximation does not affect any
> conclusion.

### 2.2 Event milestones (pooled deaths, calendar)

| Date | Cumulative deaths | % of 126 | Type | Source |
|------|-------------------|----------|------|--------|
| 2024-12-10 | 60 | 47.6% | [S]* | Interim-analysis trigger; IDMC review completed and announced Jan 2025 [R4][R5]. *Exact 8-K date used in code (2024-12-10) should be reconciled against SELLAS IR; the milestone itself (interim at 60) is firmly sourced. |
| 2025-12-26 | 72 | 57.1% | [S] | SELLAS IR / TipRanks, 29 Dec 2025 [R3]. |
| 2026-05-11 | 78 | 61.9% | [S] | SEC 8-K exhibit 99.1 and Q1-2026 release, 12 May 2026 [R6]. |
| ~2026-06-21 | still 78 | 61.9% | [S] | No 80th-event announcement as of late June 2026 [R8] → near-zero accrual late Q2. |

Inter-milestone accrual ≈ **1 death/month** throughout — the central empirical anomaly that drives
the whole analysis (a cohort mostly 2–4 years past randomization should be dying far faster unless
survival is unexpectedly long).

### 2.3 Enrollment reconstruction

The exact monthly accrual is **not public**; the curve is reconstructed [A] to honor the sourced
anchors below. Its shape is controlled by the **enrollment-timing slider** (Section 2.8), which slides
accrual between an earlier (flat) and a later (back-loaded) profile. Because the *median enrollment
date* is the quantity that actually drives time-from-randomization at each milestone, the explorer
**displays the implied median date** (default ≈ Mar 2023) live, together with the cumulative
patients enrolled at the sourced anchor dates, so drift away from the anchors is visible.

| Anchor | Value | Type | Source |
|--------|-------|------|--------|
| Registration | NCT04229979 first posted Jan 2020 | [S] | ClinicalTrials.gov. |
| Early protocol | WT1-positivity required initially, later broadened | [S] | OncLive eligibility note [R5]. |
| Cumulative enrolled (anchors) | ~20 by Apr 2022 · ~104 by Nov 2023 · 126 by Apr 2024 | [S] | SELLAS PRs (2023) / SAP [R2]. |
| China cohort (via 3D Medicines) | enrolled ~Dec 2023 – Mar 2024 | [S] | SAP/partnership disclosures [R2]. |
| Last patient in | ~March 2024 | [S] | CEO, May 2026 conference [R7]. |
| Original expectation to 80th event | 12–15 months after last patient (~mid-2025) | [S] | CEO, May 2026 conference [R7]. |
| **Code reconstruction (base)** | slow 2020–21 (COVID + WT1-only) → heavy 2022–23 → China bolus to Mar-2024, summing to 126; **implied median ≈ Mar 2023** | [A] | Piecewise monthly rates chosen to match the anchors above. The ~104-by-Nov-2023 anchor pins the median to roughly Q1–Q2 2023. |

### 2.4 Interim disclosures (Jan 2025, at 60 deaths)

| Quantity | Value | Type | Source |
|----------|-------|------|--------|
| Median follow-up at interim | ~13.5 months (range 1 to >36) | [S] | CancerNetwork / Targeted Oncology [R4][R5]. |
| Deaths at interim | <50% of enrolled (i.e. 60/126 = 47.6%) | [S] | [R4]. |
| Pooled median OS | **≥ 13.5 months** (a floor; blinded) | [S] | [R4] — note this is median *follow-up* with <50% dead, so pooled median OS is at least this. |
| IDMC recommendation | continue without modification; futility crossed; no safety concerns | [S] | [R4][R5]. |
| WT1 immune response | ~80% of GPS patients showed a WT1-specific T-cell response | [S] | Interim coverage [R4] → motivates the ~20% default non-responder fraction in the explorer. |
| Historical comparator cited | ~6-month OS in a similar CR2 non-transplant population | [S] | [R4]. |

### 2.5 BAT comparator and the component library (`build_plateau`)

The BAT arm is modeled as a weighted mixture of component therapies, each a cure-mixture
parameterized by **(median OS, long-term/"cure" fraction, Weibull shape k)**. These per-component
numbers are **analyst assumptions [A]** anchored to the comparator literature; they are the main
lever and are intended to be edited. The shape **k** generalizes the non-cured tail beyond a pure
exponential (`k = 1` reproduces the exponential): `k < 1` is a heavy tail (more long-term survivors),
`k > 1` accelerates. All components default to `k = 1`.

| Component | Median OS (mo) | Cure fraction | Shape k | Type | Anchor / reasoning |
|-----------|----------------|---------------|---------|------|--------------------|
| Observation / BSC | 6.0 | 0.08 | 1 | [A] | Untreated CR2 relapses fast; long-term survival low. **Non-responders track this row.** |
| Hydroxyurea (palliative) | 6.0 | 0.05 | 1 | [A] | Palliative; poorest durable-remission. |
| HMA (aza/dec) | 10.0 | 0.13 | 1 | [A] | Some durable responses; consistent with HMA-maintenance literature. |
| Venetoclax (± HMA) | 13.0 | 0.22 | 1 | [A] | Best BAT option; a subset achieve durable remission. **This is the key bear/bull knob.** |
| LDAC | 8.0 | 0.09 | 1 | [A] | Modest activity. |

**Presets** (selectable in the explorer; weights auto-normalize):
*Base* (15/5/30/35/15, ven cure 22%) · *Low-venetoclax* (25/15/35/10/15) ·
*Venetoclax-dominant* (5/2/23/60/10) · *Bear corner* (5/2/13/70/10, ven cure 36%) · *Bull corner*
(20/10/35/10/25, ven cure 12%) — the bear corner is the only composition that pushes the
plateau-shape P(success) clearly below 50%. The **bull corner** is its symmetric mirror: it credits
BAT as little as is clinically defensible for a largely venetoclax-exposed R/R population — venetoclax
demoted to a floor weight and to a poorly-durable 12% cure, its remaining weight relocated onto the
low-cure active (HMA/LDAC) and palliative (Observation/Hydroxyurea) components, with active therapy
still ~70% of BAT. It drives plateau P(success) to its ceiling (~100%) and, more usefully, pushes the
no-GPS-cure null toward **State A/B rejection** (a no-cure GPS responder must run to a boundary to fit),
i.e. the regime where GPS-specific cure *is* required — the mirror-image payoff to the bear corner's
P(success) collapse.

Supporting literature anchors for these assumptions [A]:
- Contemporary non-transplant CR2 maintenance (HMA and/or BCL-2 inhibitor): **~8-month** expected
  median OS, per a REGAL steering-committee member [R3].
- R/R AML on venetoclax+HMA (active disease): median OS ~5.5–6.1 mo; post-Ven/HMA failure ~5.9 mo
  (relapsed 11.2 / refractory 3.1) — a *floor*, since REGAL patients are in remission, not active
  R/R disease. Ven+HMA *responders* (selected) run much longer (~21.6 mo). [comparator search,
  Section 2.7]
- Oral-azacitidine maintenance (QUAZAR AML-001, CR1 context): ~24.7-mo median OS — relevant for
  the *upper* bound on maintenance benefit, not the CR2 control.

**Base composition** (investigator's-choice weights, contemporary; **assumption [A]**, editable):
Observation 0.15 · Hydroxyurea 0.05 · HMA 0.30 · Venetoclax 0.35 · LDAC 0.15 → implied BAT cure
≈ 14%, BAT median ≈ 9.4 mo. Two alternates ("low-venetoclax / early-ex-US", "venetoclax-dominant /
modern US") bracket the range.

### 2.5.1 Enrollment selection (eligibility filter)

The component medians in Section 2.5 describe **all** CR2 transplant-ineligible patients on each
therapy. But a trial's eligibility bar (performance status, organ function, blast counts, …) enrols a
**healthier subset** than the unselected real-world population those medians come from — so the true
comparator arm can outlive its face-value component inputs. The **enrollment-selection slider**
(`esel`, 0–50%, default 25%) makes that gap an explicit lever.

| Parameter | Value | Type | Source / reasoning |
|-----------|-------|------|--------------------|
| Enrollment selection (drop weakest / keep strongest 1−f) | 0–50%, default 25% | [A] | Fraction of the *weakest* patients (by survival) the eligibility criteria are assumed to screen out. 0% = component medians taken at face value; 50% = only the healthiest half of each component is enrolled. |

**Mechanism (left-truncation).** The operation is a **left-truncation**: discard the earliest-dying
`f`, retain the longest-surviving `1−f`. Keeping the healthiest fraction `1−f` of any distribution is
exactly its survival conditioned on outliving its `f`-quantile `t_f` (where `S(t_f)=1−f`):

```
S_sel(t) = min(1, S(t) / (1 − f))
```

for each BAT component, for the plateau panel's GPS responders (cure-mixture), and for the no-GPS-cure
panel's GPS responder Weibull alike. This lifts every curve to its "top `100(1−f)`%" shape: the
long-term/cure fraction **rises** from `c` to `c/(1−f)` and the median lengthens, with no re-anchoring
of the Weibull scale (so the `c < 0.5` parameterization never breaks). The `min(1, ·)` clip is **kept
on purpose**: the near-flat segment before `t_f` is real **guarantee time**, with a direct correlate in
REGAL's *"estimated life expectancy > 6 months"* enrolment criterion — it is a feature, not an artifact.
The matching Monte-Carlo draw is the inverse-transform of the same left-truncation: draw
`u ~ Unif(0, 1−f)` (which keeps the strongest `1−f`), so a cured patient survives with probability
`c/(1−f)`, otherwise its non-cured time is drawn conditioned on exceeding `t_f`; the no-cure GPS
responder simply draws `u = (1−f)·rnd()`. At `f = 0` every expression collapses back to the unselected
model exactly.

**Applies to both panels, before the arm split.** Because BAT is **shared code** (`bat_arm`), the
selection is literally an **upstream transform of the pooled CR2 pool, applied identically in both
panels** — there is no second BAT copy to keep in sync. It is shared infrastructure, not one of the
assumptions that distinguishes the panels (that one assumption, the GPS cured fraction, lives
downstream). The truncation is non-differential across arms, so applied to a *fixed* arm split it
cannot bias the within-trial comparison. **Note, though, that the fitted HR is *not* strictly invariant
to `f`** here: because the milestones are held fixed and the arm split is *re-fit* at each `f` (the
plateau's `π_resp`, the null's `m_G`/`s_G`), selection re-attributes survival to BAT and the fitted HR
drifts — e.g. the plateau `medHR` moves ~0.29 → 0.42 → 0.61 as `f` goes 0 → 0.25 → 0.40. This drift is
inherited from the (unchanged) plateau fit and is the correct consequence of pinning the blinded
milestones while the split re-calibrates; what selection cannot do is bias the comparison *at a fixed
split*. What clearly *does* move with `f` is the milestone fit, the P(success), and the BAT cured
fraction (which rises as `π_BAT → π_BAT/(1−f)`). (At extreme `f` the re-fit can be pushed onto a
parameter boundary in the no-GPS-cure panel, which then reports its verdict as *rejected* — see
Section 4.7.)

**`q` is the single BAT-side lever.** With the BAT arm otherwise fixed by the component medians, `q`
is what determines how much of the milestone deceleration is attributed to a healthier enrolled cohort
versus to the GPS effect; the plateau fit's *only* free parameter is the GPS responder cure `π_resp`.
The default is **`q = 25%`** (mid-band; see below).

**Effect (base preset).** As `q` rises 0 → 25 → 50% the BAT median OS lifts ~9 → 14 → 22 mo and the BAT
cure fraction climbs ~14 → 19 → 29% (both plotted live in panel *(i)* / the "enrollment selection lifts
the BAT arm" chart, `S_BAT` and `π_BAT/(1−q)`, independent of the Monte-Carlo). To keep the pooled
60/72/78 pinned, the fitted GPS responder cure falls ~0.81 → 0.70 → 0.48, so the **plateau** P(success)
drops steeply ~100 → 94 → 13% — a healthier, harder-to-beat comparator leaves less residual to
attribute to GPS. Note the direction of the fit-check: at `q = 0` the raw medians *over*-produce early
deaths (modeled ~65/74/76 vs 60/72/78) and `π_resp` cannot slow BAT, so a residual misfit at low `q` is
the signal that *some* selection is needed; the fit tightens through the defensible band and, past it,
the first milestone starts to *under*-fire (BAT too healthy). Because BAT is shared, the **no-GPS-cure
null** rides the same BAT: as `q` rises the null's fitted GPS median `m_G` and tail `s_G` re-fit, and the
verdict can flip (a healthier BAT makes it *easier* for a no-cure GPS to explain the plateau, pushing
toward State C; an extreme `q` can instead push the fit onto a boundary → State A/B rejected).
Enrollment selection is therefore chiefly the *plateau-shape* lever, and the natural companion to the
venetoclax-cure and composition knobs for building a bear case on the comparator arm.

### 2.6 Bayesian priors on the BAT plateau (an alternative to the composition lever)

One way to set the BAT-arm long-term-survivor fraction (π_c) is a Beta prior, with the
GPS plateau following from the data constraint (Section 4.4). The explorer replaces this abstract
prior with the clinically-grounded **BAT composition** (Section 2.5) and the **enrollment-selection
lever** (Section 2.5.1), which together set π_BAT directly; the Beta priors below are an alternative
one-number mapping from a prior to a P(success). Priors are **analyst choices [A]**:

| Prior | Beta(a,b) | Mean π_c | Rationale |
|-------|-----------|----------|-----------|
| Optimistic | Beta(4.55, 30.45) | 0.13 | BAT ≈ historical (6–8 mo, low plateau). |
| Base | Beta(5.10, 24.90) | 0.17 | Steering-committee ~8-mo BAT anchor [R3]. |
| Skeptical | Beta(8.10, 21.90) | 0.27 | Venetoclax-era BAT substantially improved. |

### 2.7 GPS non-responder subgroup (`build_plateau`, non-responder path)

| Parameter | Value | Type | Source / reasoning |
|-----------|-------|------|--------------------|
| Non-responder fraction f_nr | swept 0–40% (default 20%) | [A] | Anchored to the ~80% WT1 T-cell response rate [R4] ⇒ ~20% immunological non-responders. |
| Non-responder survival | = Observation component (median 6 mo, cure 8%) | [A] | User's specification: non-responders get no vaccine benefit → behave like best-supportive-care. |
| Responder cure | refit to events given f_nr & BAT | [D] | Increases ~56% → ~91% as f_nr rises 0 → 40% (base preset, 2% natural death); the GPS *arm* cure stays ~57% because the rising responder cure offsets the larger non-responder share (Section 6). |

### 2.8 Survival-shape stress controls (the explorer's headline knobs)

These do not change the milestones — they change the *shape* fit to them, which is exactly the
unidentified question. All are user-controlled in the explorer.

| Control | Range / default | Type | Role |
|---------|-----------------|------|------|
| No-GPS-cure GPS tail shape **s<sub>G</sub>** (Weibull) | 0.15–1.5, **fitted** by default (manual override) | [D]/[A] | Shape of the no-GPS-cure panel's GPS responder Weibull. In **auto** mode it is a *fitted* parameter of the null (alongside the GPS responder median m<sub>G</sub>) and the slider merely displays the fitted value. Tick **override** to pin it and explore: **s<sub>G</sub> < 1 = heavier tail**; s<sub>G</sub> → 1 is exponential. s<sub>G</sub> is free to reach a genuinely heavy tail — that is what lets a no-cure Weibull *try* to mimic a plateau, so a State-C fit is real evidence. Controls the null verdict only. |
| Enrollment timing (median) | 0–1, default 0.50 (≈ median Mar 2023) | [A] | Slides the monthly accrual between an earlier (flat) and a later (back-loaded) profile; the **implied median enrollment date** and cumulative-at-anchor counts are displayed live (Section 2.3). The sourced anchors hold the median to ~Q1–Q2 2023. |
| Per-component shape **k** | ≥0.3, default 1 | [A] | Weibull shape of each BAT component's non-cured tail (Section 2.5). |

### 2.9 Natural (non-disease) death rate

The REGAL population is an AML second-complete-remission cohort that is **mostly in its sixties**, so
a non-trivial share of deaths is background, age-related mortality rather than disease relapse. The
explorer makes this an explicit, adjustable assumption.

| Control | Range / default | Type | Role |
|---------|-----------------|------|------|
| Natural death rate | 0–10%/yr, default 2% | [A] | All-cause background mortality, applied **equally to both arms** as an independent competing risk. ~2%/yr ≈ the US all-cause rate for ages 60–69; raise to stress-test an older or frailer cohort. |

**Mechanics.** The annual fraction `p` is converted to a constant monthly hazard
`h = −ln(1 − p) / 12` and overlaid as a multiplicative survival factor `S_nat(t) = e^(−h·t)` on every
arm. Because it is common to both arms, the pooled all-cause survival is simply
`S_pool^all(t) = S_pool^disease(t) · S_nat(t)`. This factor enters the milestone fit (Section 3), so the
calibration *attributes the observed 60/72/78 deaths to disease + background mortality*: a higher
natural rate implies disease-specific survival is actually somewhat **better** than the raw milestones
would otherwise suggest. In the Monte-Carlo (Section 4), each subject draws an independent exponential
natural-death time `T_nat = −ln(u)/h` and dies of whichever cause comes first
(`survival = min(disease, T_nat)`); this also caps the "cured" (plateau) subjects, who otherwise never
contribute an event.

**Effect on the readout.** Natural mortality (i) thins the plateau and shortens medians — e.g. it gives the
GPS arm a finite ~78-mo all-cause median where the disease-only plateau never crosses 50% — and (ii) brings
the 80th-event trigger *forward*: the cure-mixture "reached" fraction climbs from ~82% at 0% to ~100% by
2%/yr. Two forces then push P(success) in opposite directions — background deaths are *non-differential*,
which *dilutes* the treatment contrast (downward), but the more-reliable trigger removes stalled sims that
never reached significance (upward). In the explorer's presets the trigger-reliability gain dominates, so the
base-preset plateau P(success) rises gently with the natural rate (≈ **94% → 96% → 99% → 100%** across
0 / 2 / 5 / 10 %/yr, with the GPS arm cure rising 51% → 57% → 66% → 80% over the same range). Dilution would
win only where the trigger already fires in ~100% of sims; at the realistic ~2%/yr default the net move is a
few points.

### 2.10 Interim futility consistency check

A sourced fact that the earlier versions left on the table: at the **60-event interim** the IDMC
reviewed the trial and recommended continuation — i.e. it **cleared the pre-specified futility look**
[R4][R5]. That is information about the arm separation, because a scenario in which GPS shows little
or no benefit by the interim would have been *stopped*, not continued.

The explorer uses this as a **consistency check on the arm split** rather than leaving the split
entirely free:

| Control | Range / default | Type | Role |
|---------|-----------------|------|------|
| Interim-analysis events | default 60 | [S] | The event count at the IDMC interim (SAP [R2]). |
| Interim futility HR | default 1.00 | [A] | The trial is taken to have been on track for futility-stop only if the *implied* HR at the interim was below this threshold. 1.00 = "no benefit trend"; tighten it (e.g. 0.85) to impose the stronger reading that continuation implied a real interim signal. |

**Mechanics.** In the Monte-Carlo the model already simulates every event time, so it computes the
implied Cox/log-rank HR at the moment the 60th death occurs (median across sims) exactly as it does
for the 80th. If that **implied interim HR exceeds the futility threshold**, the scenario is
inconsistent with the disclosed "continue past futility" and is flagged as implausible in the metrics
panel and fit note. This converts the arm split from a fully free knob into a **bounded** one: BAT
assumptions that imply GPS was barely separating by the interim are ruled out.

**Caveat.** The futility *boundary* itself is an assumption [A], not a published number, so it is an
adjustable input. At the default 1.00 even the pessimistic **bear corner** clears it (implied interim
HR ≈ 0.7), so the constraint mainly excludes extreme anti-GPS scenarios; tightening the threshold
makes it bite harder. It is a soft, user-controlled constraint, deliberately not a hard gate.

### 2.11 Loss to follow-up (administrative censoring)

Distinct from natural death (Section 2.9, which *is* an event), some patients leave the study before
dying — withdrawal, lost to follow-up, administrative censoring. These patients contribute follow-up
but **no death event**, so they slow event accrual.

| Control | Range / default | Type | Role |
|---------|-----------------|------|------|
| Loss to follow-up | 0–10%/yr, default 0 | [A] | Annual dropout rate, applied to both arms as an independent censoring process. 0 = complete follow-up; comparable trials run ~3–10%. |

**Mechanics.** Each subject draws an independent exponential censoring time `T_cens = −ln(u)/h_c`
(monthly hazard `h_c = −ln(1−p)/12`); if it precedes death the subject is censored (no event, but
counted alive "before censoring" in the per-arm 80th-event split). The same thinning enters the
milestone fit: the expected *observed* deaths by a date use
`∫ S_cens(t) dF_death(t) = e^{−h_c τ}(1−S(τ)) + h_c ∫₀^τ (1−S(t)) e^{−h_c t} dt` per cohort
(closed-form reduces to `1−S(τ)` when `h_c = 0`), so the fit stays calibrated to 60/72/78 with the
underlying disease survival adjusted for the censoring. At default 0 the model is unchanged.

**Effect.** Dropout meaningfully lowers P(success) and can stall the trigger: at the base preset the
plateau P(success) falls ~96% → 93% → 88% → 60% across 0 / 3 / 5 / 10 %/yr, and the 80th-event
"reached" fraction starts dropping (~89% at 10%). It is non-differential, so it dilutes the contrast
and removes events; unlike natural death it does not bring the trigger forward.

**Important reading of this control.** Because the censoring is folded into the *fit*, raising the
slider re-infers a **markedly deadlier underlying disease** to still reproduce the fixed 60/72/78
counts (some of those deaths are now "hidden" by dropout) — the GPS median moves ~78 → 38 → 24 mo
across 0 / 5 / 10 %/yr. So the P(success) decline is **not** merely "fewer observed events"; the
slider also reshapes the disease curve. That coupling follows from holding the milestones fixed, but
it is the key thing to internalize about what this control does.

### 2.12 Milestone weighting and fit uncertainty

The pooled fit minimizes a weighted squared error over the three milestones (Section 4.3). Two
controls expose the robustness of that fit:

| Control | Default | Type | Role |
|---------|---------|------|------|
| Milestone weighting | weighted 1 / 2 / 4 (toggle to equal 1 / 1 / 1) | [A] | The default up-weights the most recent (most informative) milestone; the **unweighted** toggle treats 60/72/78 equally, testing whether the weighting choice drives the answer. At base it barely moves the fit (GPS median ~78 → ~79 mo). |
| GPS-median Poisson interval | reported, not set | [D] | The event counts carry Poisson sampling noise, so the explorer refits at each count ±√n and reports the resulting **~68% interval on the derived GPS median** (e.g. ~23–222 mo at base). Its width shows how weakly three counts constrain the tail. |

---

## 3. Calibrated / derived outputs [D]

Representative values at the **base preset** (f_nr = 20%, natural death 2%/yr, fitted GPS tail s<sub>G</sub>,
enrollment selection q = 25%, 0% loss-to-follow-up, weighted fit); every number is a function of the user controls in Sections
2.5–2.12, so treat these as a centre point, not a
fixed result. Monte-Carlo figures carry ±2–3 pp simulation noise at the default sim budget.

| Quantity | Value (base preset) | Source |
|----------|---------------------|--------|
| Median enrollment date | ≈ Mar 2023 (cumulative ≈ 30 / 102 / 126 by Apr 2022 / Nov 2023 / Apr 2024) | `enroll` |
| BAT cure / median | ~19% · ~14 mo at the q=25% default; left-truncation sweeps it ~14% · ~9 mo (q=0) → ~29% · ~22 mo (q=50%), the cured fraction *rising* with q (Section 2.5.1) | `build_plateau` |
| GPS cure / median | ~58% · ~90 mo all-cause (disease-only plateau is never reached); both fall as selection rises and `π_resp` re-fits down | `build_plateau` |
| GPS median Poisson 68% CI | ~21 – 234 mo (from 60/72/78 ±√n) — wide: three counts barely pin the tail | `fit_ci` |
| Pooled long-term-survivor fraction | ~0.39 (disease plateau; all-cause survival decays below it) | `build_plateau` |
| Pooled median OS | **~20 mo** (above the ≥13.5 floor) | `build_plateau` |
| Implied HR at the 60-event interim | ~0.48 (clears the 1.00 futility threshold); drifts toward 1 as selection rises | `mc` |
| Patients alive at the 80th event | ~33 GPS / ~13 BAT (before censoring) | `mc` |
| **P(success) — plateau (GPS cure)** — the headline | **~94% at the q=25% default**; selection sweeps it ~100% (q=0) → ~13% (q=50%) (Section 2.5.1) | `build_plateau` + `mc` |
| **No-GPS-cure null verdict** | **State C (not excluded) at base**: a no-cure GPS responder (median m<sub>G</sub> ≈ 47 mo, tail s<sub>G</sub> ≈ 0.46) plus BAT's plateau also fits (milestone residual RMS ≈ 1.5), so a State-C P(success) ≈ 97% is reported as the "GPS cure not required" bracket. At extreme selection or a light-BAT corner the fit runs to a boundary (s<sub>G</sub> edge or m<sub>G</sub> cap) → **State A rejected** (GPS cure required); a large residual → **State B rejected** | `build_no_gps_cure` + `mc` |
| 80th event reached in MC | ~100% of sims (both panels) at the 2% natural-death default; because BAT is shared, the null inherits the plateau's event-stall sensitivity and can also stall if BAT cure is pushed hard | `mc` |

The 2% natural-death default (Section 2.9) raises the GPS arm cure to ~57% and, because it guarantees
the trigger eventually fires, lifts the plateau "reached" fraction from ~82% (at 0%) to ~100%; that
removes the stalled sims and nudges the plateau P(success) up a few points relative to a no-mortality
run.

Sweeping the BAT composition shows what the null verdict is worth. At the **base preset** the plateau
P(success) is ~94% and the null lands in **State C** — a no-cure GPS heavy tail (median ~47 mo, shape
~0.46) also fits, so the plateau is *not provably GPS-specific* given this BAT. At the **bear corner**
the plateau P(success) collapses (~6%) and the null is still State C (a small no-cure separation
suffices). Push selection to an extreme, or credit BAT so little that a no-cure GPS must run to a
boundary to fit, and the null flips to **State A/B rejected** — GPS-specific cure *is* required. That
verdict, and its **conditionality on the BAT structure**, is the analysis's main output — not a rival
percentage.

> The plateau model's ultimate *disease* dead fraction (~63%) nearly coincides with the 80-event
> trigger (63.5%), which is *why* real-world accrual has stalled at 78 — the cohort is essentially at
> its modeled disease asymptote, and the few remaining events are expected to come slowly from
> background (natural) mortality. Because the null panel shares BAT, it inherits the same plateau and
> the same event-stall sensitivity — so "80th event reached" is a *real* metric on both panels. In the
> Monte-Carlo the natural-death overlay lets the trigger fire in ~100% of sims on a longer timeline.

---

## 4. Methodology and reasoning

### 4.1 Survival primitives

Both panels share a **Weibull** primitive `Sweib(t) = exp(−(t/scale)^shape)` whose `scale` is set so
its median equals a target (`scale = median / (ln 2)^{1/shape}`); **shape < 1 gives a heavier tail**
and a monotone non-increasing hazard (no non-monotone hazard "hump"). The BAT arm is identical in both
panels (`bat_arm`); the panels differ only in the GPS **responder** family:

- **Plateau — GPS cure:** GPS responders (and every BAT component) use the cure-mixture Weibull
  `Sc(t) = π + (1−π)·exp(−(t / λ)^k)` — a Weibull **plus** a cured/long-term-survivor fraction π. λ is
  set so the non-cured median equals the component median (`λ = median / A(π)^{1/k}`,
  `A(π) = −ln[(0.5−π)/(1−π)]`); `k = 1` recovers the pure exponential. Rationale: cancer-vaccine effects
  classically manifest as a durable-remission (plateau) difference.
- **No-GPS-cure — GPS responder Weibull:** GPS responders use the **bare** Weibull `Sweib` with **no
  cured fraction**, fitted median `m_G` and **fitted shape `s_G`**. This is the explicit "the plateau
  may not be *GPS-specific*" alternative: with `s_G` free to go heavy, a no-cure GPS heavy tail can
  *try* to reproduce the milestone deceleration on top of BAT's own plateau (Section 4.7).

Both share the matching inverse-CDF samplers used by the Monte-Carlo (`sampNC` for the cure-mixture
non-cured Weibull, `sampWeib` for the bare no-GPS-cure GPS responder Weibull).

### 4.2 Enrollment → expected deaths

For an enrollment cohort enrolled at calendar time `e` with `n` patients, expected cumulative
deaths at calendar time `T` are `Σ_cohorts n · D(T − e)`, where `D(τ)` is the fraction *observed*
dead by `τ`. With complete follow-up `D(τ) = 1 − S(τ)` and `S` is the **all-cause** survival
`S_disease · S_nat` (Section 2.9); under loss-to-follow-up at hazard `h_c` (Section 2.11) the observed
fraction is thinned to `D(τ) = e^{−h_c τ}(1−S(τ)) + h_c ∫₀^τ (1−S(t))e^{−h_c t}dt`. This convolution
is the forward model linking a survival curve to the disclosed event counts; folding background
mortality and censoring into `D` is what lets the fit split the observed deaths between disease,
natural causes, and patients who left before dying.

### 4.3 Pooled calibration

The pooled curve is `0.5·S_BAT + 0.5·S_GPS`. The explorer fits its free parameters to the three
(date, deaths) milestones by **weighted least squares**, with weights `WT = [1, 2, 4]` that
up-weight the most recent (and most informative) milestone (a **toggle** switches to equal weights
`[1, 1, 1]` to check the choice is not load-bearing — at base it shifts the GPS median by ~1 mo), over
a coarse grid followed by three local-refinement passes. Sampling uncertainty in the counts is
propagated by refitting at each milestone ±√n, giving a ~68% Poisson interval on the derived medians
(Section 2.12). For the plateau model there is a **single** free parameter — the GPS responder
cure `π_resp` — fit over a 1-D grid plus local refinement. The BAT arm is fully determined by the
component medians and the enrollment-selection fraction `q` (Section 2.5.1): any longevity the
milestones demand beyond the raw component medians is supplied *explicitly* by `q` — a healthier
enrolled cohort — rather than by any hidden calibration. The enrollment shape is set by the
back-loading slider (Section 2.8) rather than marginalized.

### 4.4 Arm decomposition (the unidentified step)

Because blinded data fix only the *average* of the arms, the model imposes the constraint
`π_GPS = 2·π_pool − π_BAT`: the data pin `π_pool`; the **BAT prior/composition fixes π_BAT**; the
GPS plateau follows. Different decomposition modes:
- **PH (proportional hazards):** `S_GPS = S_BAT^HR` — but this cannot reproduce a plateau without an
  implausibly extreme HR, evidence *against* simple PH (and ruled out independently by the slow
  accrual).
- **Cure-difference (preferred):** GPS shares the control's early dynamics but has a higher plateau
  — a biologically motivated, early-and-sustained separation.

### 4.5 Monte-Carlo P(success)

`P(success)` is the fraction of simulated trials whose pre-specified test is significant
(`mc()`). Each simulated trial: draws enrollment per cohort; assigns 1:1 GPS/BAT; draws each
patient's survival from the relevant arm/component (cured patients get an effectively infinite
time); applies an independent exponential natural-death time as a competing risk
(`survival = min(disease, T_nat)`, Section 2.9), which also caps the cured subjects; draws an
independent loss-to-follow-up time and censors the subject (no event) if it precedes death
(Section 2.11); finds the calendar time of the `FINAL`-th (80th) death; censors everyone there; and
computes
the **log-rank score statistic = Cox score test = the trial's actual pre-specified test**, declaring
success when `z > z_crit = |ln(HRC)|·√FINAL / 2 = 2.024`. It returns P(significant), the fraction of
sims that reach the 80th event, and the median simulated HR. The same `mc()` runs on both panels; on
the null panel it draws GPS responders from the no-cure Weibull (all other draws identical to the
plateau branch), and its P(success) is reported only when the fit is State C (Section 4.7).

The same pass also reports three diagnostics that make the fit auditable: the **implied Cox HR at the
60-event interim** (the futility read-through of Section 2.10), a boolean for whether it clears the
futility threshold, and the mean **per-arm patients alive at the 80th event** (before censoring) —
e.g. ~33 GPS / ~13 BAT at the base preset. The alive-split is the same quantity external modelers use
as a sanity check on the arm decomposition.

### 4.6 Component-mixture BAT and non-responders

These replace any abstract π_BAT prior with clinically-grounded structure (Sections 2.5, 2.7).
**They add interpretability, not identifying information** — the blinded data still see only the
pooled curve, so refits absorb this structure and leave P(success) largely unchanged
(Section 6).

### 4.7 The no-GPS-cure null test and its three-state verdict

The second panel asks a sharper question than "is the plateau real": **does the milestone plateau
require a *GPS-specific* durable benefit, or can it be explained by BAT's own (venetoclax-driven)
plateau plus a GPS heavy tail?** It holds BAT **bit-for-bit identical** to the plateau panel (shared
`bat_arm`) and changes only the GPS **responder** component from the cure-mixture to a **no-cure
Weibull** with two fitted parameters: a GPS responder median `m_G ∈ [median_BAT, 120]` months and a
tail shape `s_G ∈ [0.15, 1.5]`. GPS immunological non-responders (`f_nr`) still track Observation, in
both panels. The same Monte-Carlo (Section 4.5) then scores it in State C.

**BAT is fixed on purpose.** The global "is there any plateau" question needs BAT free (the arm split
is unknowable). *This* null tests a different thing, so it deliberately reverses that guardrail: fixing
BAT is **controlling the confound and varying the thesis parameter**. The identifiability boundary is
on the GPS knobs: the parameter that runs to a cap under a plateau-shaped milestone set is
the GPS median `m_G` or its tail `s_G`, which is clean to detect. The
**"tail free to go heavy" guardrail is retained and load-bearing**: `s_G` must be free to reach a
genuinely heavy tail, because only then can a State-C "fit" be real evidence (a heavy Weibull *can*
mimic a plateau over 48 months) and a State-A "can't fit" be real evidence.

**The three-state verdict.** Compute the verdict from the fitted `(m_G, s_G)` plus boundary detection;
a boundary solution is **never** stabilized into a clean number:

- **State A — non-identified (no PoS shown).** The fit lands on a box boundary. Two sub-cases:
  - **Cure required** (`cure_req = true`): `m_G` at its 120-mo cap (a raise-the-cap diagnostic confirms
    it *tracks* the higher cap → unidentified), or `s_G` at the **heavy** edge (a near-degenerate tail
    faking the plateau). Both mean a de-facto GPS cure is required — the thesis-supporting rejection.
  - **Ambiguous** (`cure_req = false`): `s_G` at the **light** edge (`s_G → 1.5`). A light Weibull has an
    *increasing* hazard — the opposite of a plateau — so this is **not** a "cure required" signal; it
    just means the milestones want an even sharper responder tail than the box allows, leaving the
    no-cure fit unidentified. It neither supports nor refutes the thesis, and (like the plateau panel's
    own low-selection misfit) appears only near zero enrollment selection.

  Either sub-case is a boundary solution, so **no PoS is shown** — the panel reports the verdict and the
  milestone residual.
- **State B — null REJECTED (inconsistent).** The best interior fit still misses the milestones (RMS
  residual above tolerance). A no-cure GPS responder cannot reproduce the milestones given this BAT.
  **No PoS is shown.**
- **State C — null NOT excluded.** An interior, low-residual fit exists: a no-cure GPS heavy tail
  (median `m_G`, shape `s_G`) plus BAT's plateau also fits. Here the panel reports `m_G`, `s_G`, the
  derived median ratio, the implied HR **and** a P(success), framed as the "GPS cure not required"
  bracket. **Expect State C at the default** — because BAT keeps its plateau, some of the milestone
  deceleration is already explained on the BAT side, so a no-cure GPS heavy tail has less work to do. A
  frequent State C is not the tool failing; it is the honest statement of what the blinded data cannot
  resolve given a generous BAT.

**Conditionality caveat.** State C is only as strong as the BAT structure: it means "GPS cure not
required *if* BAT is credited at these component medians/cures and this selection." The bear presets and
the selection slider are the intended stress controls — and the literature bounds a defensible BAT
(venetoclax as re-induction/transplant-bridging rather than established CR2 maintenance; transplant-
ineligible non-transplanted CR2 collapsing to ~4–5 mo median OS), so a defensible BAT is *not*
unboundedly generous, which is what keeps State C from being vacuous.

---

## 5. Key functions (reference)

Names below use the Python spelling; the JavaScript in `regal_explorer.html` uses the camelCase
equivalents (`bat_arm` → `batArm`, `build_plateau` → `buildPlateau`, `build_no_gps_cure` →
`buildNoGPSCure`, and the shared `Sweib`/`sampWeib`/`wscale` primitives). The two implementations are
function-for-function equivalent (the Python `common()` reads its inputs from the `cfg` dict, where the
JavaScript reads module-level state, but the computed results match).

| Function | Purpose |
|----------|---------|
| `Acoef` / `lam` | Weibull coefficient `A(π) = −ln[(0.5−π)/(1−π)]` and scale `λ = median / A^{1/k}`. |
| `Sc(t, med, cure, k)` | Per-component cure-mixture Weibull survival (BAT components + plateau-panel GPS responders, Section 4.1). |
| `Sweib(t, scale, shape)` / `wscale(med, shape)` | The bare Weibull survival (the no-GPS-cure GPS responder; shape < 1 = heavier tail) and the median→scale map `scale = median/(ln 2)^{1/shape}`. |
| `sampNC` / `sampWeib` | Inverse-CDF samplers for the cure-mixture non-cured Weibull and the bare no-GPS-cure Weibull times (Monte-Carlo draws). |
| `enroll(bl, N)` | Monthly enrollment cohorts summing to `N`, interpolating flat↔back-loaded by `bl` (Section 2.3). |
| `common(cfg)` | Shared setup: normalized weights, clamped per-component params, cohorts, milestones, fit weights. |
| `bat_arm(cfg)` | The **shared BAT arm** consumed byte-identically by both panels: per-component cure-mixture with left-truncation selection; returns `Sbat/Snc/Ssel`, `pibat`, `obs`. Guarantees "BAT identical" by construction. |
| `build_plateau` | Plateau (GPS-cure) headline: shares `bat_arm`, fits the single free parameter `π_resp` (GPS responder cure) to the milestones; returns per-arm `Sbat/Sgps/Spool`, cures, medians (Sections 4.3–4.4). |
| `build_no_gps_cure` | No-GPS-cure null: shares `bat_arm`, fits GPS responder median `m_G` and tail shape `s_G` (auto) with GPS non-responders tracking Observation; emits the three-state verdict (A/B/C), boundary flags, and milestone residual (Section 4.7). |
| `median(S)` | Bisection median of a survival function (`∞`/"NR" if never below 0.5 within 900 mo). |
| `mc(M, nsim)` | Monte-Carlo trial: enrollment → per-arm death draws → censor at the 80th event → **log-rank/Cox score test**; returns P(significant), 80th-event-reached fraction, median HR (Section 4.5). |
| `figure()` / `render` + `chart*` | 9-panel figure (py, 3×3 grid) / live SVG charts and metrics panel (html): `chart` (survival), `chartAccrual`, `chartHist`, `chartDiverge`, `chartEnroll`, `chartPower`, `chartSelect`. |

---

## 6. Principal findings

1. **The framework matches the trial.** The confirmed primary test is a stratified Cox at one-sided
   0.025 with an OBF interim [R1]; the model's significance machinery and HR ≤ 0.636 threshold are
   consistent with it.
2. **Blinded pooled survival is high:** ~33–37% modeled plateau, ~16–21-mo median — far above the
   ~6–8-mo historical/contemporary control. Something is keeping these patients alive.
3. **Under the plateau model, P(success) is governed by the BAT-quality assumption.** With a
   clinically-built BAT composition it stays high (~94% at base) and is hard to push down
   without assuming venetoclax maintenance is both dominant *and* ~30–36% durable — the
   "bear corner," where it collapses (~6%).
4. **Structural refinements are absorbed by the pooled fit.** Component-mixture BAT and a 0–40%
   non-responder subgroup each leave P(success) ≈ unchanged, because the data fix the pooled
   plateau and refits merely redistribute it (e.g. raising the non-responder fraction forces the
   responder cure up). This *localizes* the uncertainty rather than resolving it.
5. **The load-bearing question is whether the plateau is *GPS-specific*.** Holding BAT identical and
   swapping only the GPS responder to a no-cure Weibull, the null test asks whether the milestones can
   be fit *without* a GPS cure. At the base preset the answer is **State C — not excluded**: a no-cure
   GPS heavy tail (median ~47 mo, shape ~0.46) plus BAT's plateau also fits (P(success) ~97%), so the
   blinded milestones **cannot prove** the plateau is GPS-specific *given a generous BAT*. Only when BAT
   is credited so little (or selection pushed so hard) that a no-cure GPS must run to a boundary to fit
   does the null flip to **State A/B rejected** — GPS cure required. That verdict, and its explicit
   conditionality on the BAT structure, is what the explorer reports — never a rival percentage.

---

## 7. Limitations and the load-bearing assumption

- **Whether the plateau is GPS-specific is not resolvable — only tested.** The pooled plateau is
  extrapolated from three event counts. The explorer addresses this head-on with the no-GPS-cure null
  (Section 4.7): holding BAT identical, it fits a heavy-tailed no-cure GPS responder and returns a
  three-state verdict. This *quantifies* the sensitivity but does not resolve it — at the default the
  null is **not excluded** (State C), so the milestones cannot prove GPS-specific cure given a generous
  BAT. Crucially, **State C is conditional on the BAT structure**: the test is only as strong as the
  BAT medians/cures credited, so the bear presets and selection slider are the intended stress
  controls, and the reported State-C P(success) is the *pessimistic* ("GPS cure not required") bracket
  around the plateau headline — not a co-equal probability.
- **Decomposition is unidentified.** All arm-level conclusions are prior-/assumption-driven; the
  blinded data cannot adjudicate them.
- **Delayed vs sustained separation.** The cure-difference structure assumes early, sustained
  separation (favorable to the Cox test). A genuinely *delayed* separation would violate PH and the
  committed Cox test could under-detect — the one shape where this risk bites.
- **Per-component BAT survival and composition are assumptions** [A], not patient-level data; they
  are the intended user levers.
- **Natural mortality is a flat, independent hazard.** Background death (Section 2.9) is modeled as a
  single constant all-cause rate (default 2%/yr), common to both arms and independent of the disease
  process. Real age-related mortality rises across the multi-year follow-up, and non-relapse mortality
  in a post-induction AML CR2 cohort can exceed general-population rates; the 0–10%/yr slider is the
  lever for stress-testing that, but the constant-hazard, disease-independent form is a simplification.
- **Promotional bias.** Several anchors (e.g. the ~8-mo BAT figure, the "longer-than-expected
  survival" framing) originate with SELLAS or affiliates and should be discounted accordingly.
- **Interim futility pass is a soft check, not a hard gate.** The IDMC's continuation past the
  60-event futility look is used as an adjustable consistency constraint on the arm split
  (Section 2.10), flagging implausible scenarios rather than rejecting them outright; the futility
  boundary itself is an assumed number.
- **Loss to follow-up is modeled as a flat, independent rate.** Administrative censoring (Section 2.11)
  enters both the fit and the simulation, but as a single constant all-cause-independent hazard
  (default 0); real dropout is time- and arm-varying.
- **Enrollment selection is an idealized sharp filter.** The eligibility lever (Section 2.5.1) screens
  on *realized* survival — it assumes the criteria perfectly remove the patients who would in fact die
  soonest. Real criteria select on covariates only *correlated* with survival, so a given `esel` is an
  upper bound on how cleanly eligibility can enrich the cohort; treat it as "how much healthier could
  the enrolled population plausibly be," not a literal drop-rate. It is applied within each component
  (holding the composition weights fixed) and equally to both arms.
- **Not incorporated (conservative):** stratification of the Cox model (the trial stratifies; the
  simulation does not — a minor, likely slightly power-increasing, difference).

---

## 8. References

Public sources used for sourced [S] inputs. Press/secondary sources are used for facts that
originate in SELLAS disclosures; verify primary 8-K/PR text on SELLAS IR and SEC EDGAR where exact
dates matter.

- **[R1]** REGAL trial-design / methods paper, *PMC* (open access) — primary efficacy analysis
  (stratified Cox, H0: HR ≥ 1, one-sided 0.025, Lan–DeMets O'Brien–Fleming, interim at 60 deaths).
  https://pmc.ncbi.nlm.nih.gov/articles/PMC11760237/
- **[R2]** SELLAS, "Update on Phase 3 REGAL … Interim Analysis Now at 60 Events and Final Analysis
  Now at 80 Events," GlobeNewswire, 14 Nov 2022.
  https://www.globenewswire.com/news-release/2022/11/14/2554907/0/en/SELLAS-Life-Sciences-Announces-Update-on-Phase-3-REGAL-Clinical-Trial-Evaluating-Lead-Asset-Galinpepimut-S-in-Acute-Myeloid-Leukemia.html
- **[R3]** SELLAS, "Update on Pivotal Phase 3 REGAL … 72 events as of December 26, 2025"
  (steering-committee ~8-mo BAT context), 29 Dec 2025 (IR / TipRanks).
  https://www.tipranks.com/news/the-fly/sellas-life-sciences-says-regal-trial-cro-informs-company-72-events-occurred-thefly
- **[R4]** "Galinpepimut-S Completes Phase 3 REGAL Interim Analysis in AML," CancerNetwork (interim:
  median FU ~13.5 mo, <50% dead, pooled median ≥13.5 vs ~6-mo historical, IDMC continue, ~80% WT1
  response). https://www.cancernetwork.com/view/galinpepimut-s-completes-phase-3-regal-interim-analysis-in-aml
- **[R5]** "REGAL Trial Receives Green Light to Continue…," OncLive (OBF spending; eligibility/WT1;
  SAP changes). https://www.onclive.com/view/regal-trial-receives-green-light-to-continue-testing-galinpepimut-s-in-aml
  · and "Phase 3 REGAL Trial … Advances Toward Completion," Targeted Oncology (stratification
  factors; BAT-allowed agents). https://www.targetedonc.com/view/phase-3-regal-trial-of-galinpepimut-s-in-aml-advances-toward-completion
- **[R6]** SELLAS, "Reports First Quarter 2026 Financial Results …" (78 events as of 11 May 2026;
  final analysis at 80th event), 12 May 2026 — SEC 8-K exhibit 99.1.
  https://www.sec.gov/Archives/edgar/data/1390478/000139047826000009/sls-202605128xkexhibit991.htm
- **[R7]** CEO remarks, Stifel 2026 Targeted Oncology Forum, 20 May 2026 (126 patients; 12.6 vs
  8.1-mo design medians; last patient ~Mar 2024; original 12–15-mo expectation to 80th event;
  patients >3 yr on treatment). https://stocktwits.com/news-articles/markets/equity/sls-stock-gps-very-good-chance-beat-earlier-survival-outcomes/cZXDpXKReVe
- **[R8]** Status check, late June 2026 — no 80th-event announcement yet (still 78).
  https://www.merlintrader.com/sellas-life-sciences/

*Comparator literature anchors for [A] component survival (Section 2.5) were drawn from published
AML CR2 / R/R venetoclax-HMA and azacitidine-maintenance outcome studies; the specific
per-component (median, cure) values are analyst estimates, not direct quotations, and should be
treated as editable inputs rather than sourced facts.*

---

*Prepared as a quantitative research tool operating entirely on public information. It explores
assumption-driven scenarios consistent with disclosed aggregate data; it does not estimate the
confidential outcome of the ongoing trial, and it is not investment advice.*
