diff --git a/README.md b/README.md
index 7f4f0f0..5256814 100644
--- a/README.md
+++ b/README.md
@@ -15,12 +15,12 @@ https://polymarket-site-eta.vercel.app/personal.html
The site fetches live Polymarket markets, generates agent suggestions, lets you
run frequent paper cycles, and syncs the shared arena state through Neon or
-Vercel Blob. Build 59 also installs an offline app shell and caches timestamped
+Vercel Blob. Build 60 also installs an offline app shell and caches timestamped
market snapshots. During an outage, cycles continue locally; cached entries are
allowed for 90 minutes, older snapshots become mark-only, and all cached data
expires after 24 hours.
-Build 59 ranks the competition by each agent's return since Strategy 50 began.
+Build 60 ranks the competition by each agent's return since Strategy 50 began.
Historical replay equity remains visible for context, but it no longer makes an
agent look like the current leader when the live adaptive strategy is losing.
@@ -114,7 +114,7 @@ feature views before repeatable positive evidence can increase size or repeatabl
negative evidence can block a new entry. Mixed evidence stays close to neutral
instead of being mistaken for an edge.
-Build 59 enforces the documented offline boundary end to end. Cached snapshots
+Build 60 enforces the documented offline boundary end to end. Cached snapshots
under 90 minutes old may continue paper execution. Older snapshots remain usable
for valuation and chart snapshots for up to 24 hours, but cannot trigger entries,
stop-losses, gain-stops, risk rebalances, settlements, or policy exits. Network
@@ -127,18 +127,24 @@ adaptive baselines, pending signal grades, and trade evidence remain in one stra
lineage until the actual entry, sizing, or exit logic changes. Legacy build 40 and 41
records are migrated into the same strategy lineage without losing evidence.
-Build 59 independently refreshes markets for matured pending signals that have
+Build 60 independently refreshes markets for matured pending signals that have
left the current top-500 activity scan. Unavailable markets remain queued for a
bounded retry window. This prevents activity-rank survivorship from deciding
which wins and losses reach the adaptive calibration ledger.
-Build 59 also allocates the 300 pending observation slots by evidence coverage.
+Build 60 also allocates the 300 pending observation slots by evidence coverage.
Under-sampled signal/side/category cohorts are observed first, followed by
under-sampled independent events and market sides, with conviction used only as
a later tie-breaker. This prevents the same popular contracts from monopolizing
the ledger and gives the learner a realistic path to promote or reject more
diverse cohorts.
+Build 60 retains safe shared-state provider diagnostics from both reads and
+writes. A device now says `local only` when Neon is paused or a Blob credential
+is rejected, instead of presenting a local browser save as a successful
+cross-device sync. Database URLs still fail over across the configured Neon
+aliases without exposing credentials in the API response.
+
Strategy 50 coordinates high-risk exploration globally. Near-term, extreme-price,
and other gap-prone positions may be held materially by only one agent, while
ordinary independently confirmed markets retain the two-agent cap. The robustly
diff --git a/api/state.js b/api/state.js
index 402bf9d..ab10304 100644
--- a/api/state.js
+++ b/api/state.js
@@ -22,6 +22,7 @@ export function providerErrorCode(error) {
const nested = error.sourceError || error.cause;
const code = String(error.code || nested && (nested.code || nested.cause && nested.cause.code) || "").toUpperCase();
const message = `${String(error.message || error)} ${String(nested && nested.message || "")}`.toLowerCase();
+ if (/http status\s+402\b/.test(message) || /\b402 payment required\b/.test(message)) return "provider_payment_required";
if (code === "28P01" || code === "28000") return "authorization_failed";
if (code === "3D000") return "database_not_found";
if (code.startsWith("08")) return "connection_failed";
diff --git a/index.html b/index.html
index 7aceaae..6a4741c 100644
--- a/index.html
+++ b/index.html
@@ -363,7 +363,7 @@ footer{margin-top:34px;padding-top:22px;border-top:1px solid var(--border);color
Personal research mode. This copy is for your own analysis, paper tracking, and manual trade research only. It does not pool money, onboard investors, custody funds, bypass eligibility rules, or place orders without your manual approval.
-
Build 59 active: unproven directional signals train the event-clustered learner without risking cash. New observations prioritize under-sampled strategy cohorts and independent events before repeats, while shared state normalizes and fails over across configured Neon URLs. Cohorts can trade only after positive promotion. Live-priced complete YES or NO negative-risk bundles may trade when their worst-case payout remains positive after estimated costs; cached bundle prices never open positions. This remains paper trading; profits are not guaranteed.
+
Build 60 active: unproven directional signals train the event-clustered learner without risking cash. New observations prioritize under-sampled strategy cohorts and independent events before repeats, while shared state normalizes and fails over across configured Neon URLs. Cloud provider failures now remain visible instead of being mistaken for a successful cross-device save. Cohorts can trade only after positive promotion. Live-priced complete YES or NO negative-risk bundles may trade when their worst-case payout remains positive after estimated costs; cached bundle prices never open positions. This remains paper trading; profits are not guaranteed.