Skip to main contentSkip to data table
Pharos
PHAROSlive stablecoin signals

Stability Index Changelog

Full version history of PSI methodology decisions, from v1.0 to v3.4.

Latest Version

v3.4Jun 6, 2026

Fail-closed DEWS freshness dependency

PSI now requires a non-empty, fresh latest DEWS row set before publishing a new sample, preventing stale or wiped stress signals from being treated as zero stress breadth.

Impact Snapshot

  • The 30-minute cron skips PSI sample publication when latest DEWS rows are absent, missing computed_at, or older than two compute-dews intervals
  • DEWS stress breadth is now computed from warning-band rows only after dependency freshness is proven across the latest DEWS row set
  • Public PSI remains anchored to the last valid stored sample instead of publishing a healthier fresh score from stale or absent early-warning inputs
v3.4Jun 6, 2026

Fail-closed DEWS freshness dependency

PSI now requires a non-empty, fresh latest DEWS row set before publishing a new sample, preventing stale or wiped stress signals from being treated as zero stress breadth.

  • The 30-minute cron skips PSI sample publication when latest DEWS rows are absent, missing computed_at, or older than two compute-dews intervals
  • DEWS stress breadth is now computed from warning-band rows only after dependency freshness is proven across the latest DEWS row set
  • Public PSI remains anchored to the last valid stored sample instead of publishing a healthier fresh score from stale or absent early-warning inputs
Details

Impact Notes

  • The 30-minute cron skips PSI sample publication when latest DEWS rows are absent, missing computed_at, or older than two compute-dews intervals
  • DEWS stress breadth is now computed from warning-band rows only after dependency freshness is proven across the latest DEWS row set
  • Public PSI remains anchored to the last valid stored sample instead of publishing a healthier fresh score from stale or absent early-warning inputs
Commit provenance not recorded
    v3.3May 14, 2026

    Active-only PSI universe

    PSI eligibility now resolves to active tracked stablecoins plus PSI-only shadow assets, excluding pre-launch and frozen tracked rows from live PSI denominators and repair scopes.

    • Pre-launch tracked assets no longer enter the PSI-eligible registry before launch
    • Frozen tracked archives remain available on readable public detail surfaces but are excluded from live PSI computation
    • PSI-only shadow assets remain included for historical continuity and admin replay repairs
    Details

    Impact Notes

    • Pre-launch tracked assets no longer enter the PSI-eligible registry before launch
    • Frozen tracked archives remain available on readable public detail surfaces but are excluded from live PSI computation
    • PSI-only shadow assets remain included for historical continuity and admin replay repairs
    Commit provenance not recorded
      v3.2Mar 23, 2026

      Fail-closed depeg input availability

      PSI no longer publishes a fresh sample when the active-depeg input query is unavailable, preventing false continuity from an incomplete core dependency.

      • The 30-minute cron now returns degraded and skips the sample when `depeg_events` cannot be queried
      • Only already-open depegs missing a current stablecoins price may use the replay-safe `price_cache` fallback; table-level depeg input loss is no longer treated as an empty event set
      • Public PSI remains anchored to the last valid stored sample instead of silently publishing from partial core inputs
      Details

      Impact Notes

      • The 30-minute cron now returns degraded and skips the sample when `depeg_events` cannot be queried
      • Only already-open depegs missing a current stablecoins price may use the replay-safe `price_cache` fallback; table-level depeg input loss is no longer treated as an empty event set
      • Public PSI remains anchored to the last valid stored sample instead of silently publishing from partial core inputs
      Commit provenance not recorded
        v3.1Mar 23, 2026

        Open-depeg replay-price fallback

        Active depegs now stay in PSI when the current stablecoins snapshot temporarily loses a usable price but a recent replay-safe price-cache entry still exists.

        • Severity and breadth now fall back to the last replay-safe positive `price_cache` value for already-open depegs when the current stablecoins snapshot price is missing
        • Replay fallback is capped to recent cache entries (6-hour TTL) rather than unbounded historical prices
        • Prevents transient contributor/sample omissions during price-validation churn without changing the PSI formula, caps, or bands
        Details

        Impact Notes

        • Severity and breadth now fall back to the last replay-safe positive `price_cache` value for already-open depegs when the current stablecoins snapshot price is missing
        • Replay fallback is capped to recent cache entries (6-hour TTL) rather than unbounded historical prices
        • Prevents transient contributor/sample omissions during price-validation churn without changing the PSI formula, caps, or bands
        Commit provenance not recorded
          v3.0Mar 1, 2026Reconstructed

          DEWS stress breadth component

          Added DEWS-derived stress breadth as an explicit PSI component to capture broad non-depeg stress.

          • Formula changed to: 100 - severity - breadth - stressBreadth + trend
          • New stressBreadth cap of 5 points
          • Cron now reads latest DEWS bands (ALERT/WARNING/DANGER) to derive stress breadth
          Details

          Impact Notes

          • Formula changed to: 100 - severity - breadth - stressBreadth + trend
          • New stressBreadth cap of 5 points
          • Cron now reads latest DEWS bands (ALERT/WARNING/DANGER) to derive stress breadth
          Reconstructed from git commit history.1 commit
          • dcdefde
          v2.1Feb 27, 2026Reconstructed

          Trend hardening and retention safety

          Hardened trend input handling and operationalized rolling retention for PSI samples.

          • NaN/Infinity trend values now treated as 0 before clamp
          • No formula change, but edge-case score corruption prevented
          • Sample retention/pruning standardized to 90 days
          Details

          Impact Notes

          • NaN/Infinity trend values now treated as 0 before clamp
          • No formula change, but edge-case score corruption prevented
          • Sample retention/pruning standardized to 90 days
          Reconstructed from git commit history.2 commits
          • 76aa8c6
          • 74aa1cd
          v2.0Feb 26, 2026Reconstructed

          Removed freezes, rebalanced caps

          Major methodology revision removing freezes and reallocating penalty capacity.

          • Removed freezes component from formula
          • Severity cap increased 60 -> 68
          • Breadth cap increased 15 -> 17
          • Formula became: 100 - severity - breadth + trend
          Details

          Impact Notes

          • Removed freezes component from formula
          • Severity cap increased 60 -> 68
          • Breadth cap increased 15 -> 17
          • Formula became: 100 - severity - breadth + trend
          Reconstructed from git commit history.1 commit
          • bc2cfcf
          v1.3Feb 26, 2026Reconstructed

          Sample architecture and 24h average model

          PSI moved to sample-first storage with daily snapshots and 24h average surfaced as the primary displayed signal.

          • Introduced stability_index_samples table and daily snapshot aggregation
          • API and UI switched to emphasize 24h average PSI
          • Historical backfill path adjusted for peak-deviation realism
          Details

          Impact Notes

          • Introduced stability_index_samples table and daily snapshot aggregation
          • API and UI switched to emphasize 24h average PSI
          • Historical backfill path adjusted for peak-deviation realism
          Reconstructed from git commit history.2 commits
          • 9508e29
          • ad75f4f
          v1.2Feb 25, 2026Reconstructed

          15-minute chained compute + depeg depreciation/dedup

          Operational and methodological upgrade to live 15-minute PSI with chronic-depeg depreciation and per-coin deduplication.

          • PSI compute moved to chained 15-minute cron after stablecoin sync
          • Introduced chronic-depeg depreciation (grace 30d, decay 120d, floor 25%)
          • Active depegs deduped per coin (worst current bps, earliest start for age)
          Details

          Impact Notes

          • PSI compute moved to chained 15-minute cron after stablecoin sync
          • Introduced chronic-depeg depreciation (grace 30d, decay 120d, floor 25%)
          • Active depegs deduped per coin (worst current bps, earliest start for age)
          Reconstructed from git commit history.4 commits
          • 8acaa7d
          • a79049d
          • 2dfb975
          • 615256a
          v1.1Feb 25, 2026Reconstructed

          Current deviation semantics

          Severity began using live current deviation rather than event peak deviation for active depegs.

          • Live severity became recovery-sensitive instead of peak-anchored
          • Backfill behavior later diverged and was subsequently tuned
          Details

          Impact Notes

          • Live severity became recovery-sensitive instead of peak-anchored
          • Backfill behavior later diverged and was subsequently tuned
          Reconstructed from git commit history.1 commit
          • 14c75e7
          v1.0Feb 25, 2026Reconstructed

          Initial PSI release

          Launched PSI compute, API, cron persistence, and frontend integration.

          • Initial formula: 100 - severity - breadth - freezes + trend
          • Initial caps: severity 60, breadth 15, freezes 10
          • Condition bands introduced
          Details

          Impact Notes

          • Initial formula: 100 - severity - breadth - freezes + trend
          • Initial caps: severity 60, breadth 15, freezes 10
          • Condition bands introduced
          Reconstructed from git commit history.5 commits
          • c4c7caa
          • c21a6bd
          • 5eaf440
          • 6b3e7e5
          • a3f2b53