Ignore scoped HOT bridge quoting incidents
Some checks failed
deploy / deploy (push) Failing after 45s

Proof: npm test; npm run operator-dashboard:build; live NEAR Intents status-page payload normalizes to operational for tracked BTC/Gnosis assets while 1Click still returns a EURe-to-nBTC dry quote.

Assumptions: Generic partial quoting or bridge-maintenance wording is not enough to pause our BTC/Gnosis path unless the incident names a core Intents component, protocol-wide swap outage, or our tracked chains/assets.

Still fake: Status-page relevance is still text/service scoped because the upstream status API does not expose a per-asset machine-readable impact matrix.
This commit is contained in:
philipp 2026-05-11 21:02:26 +02:00
parent 754a95c6d2
commit 5425152ed9
2 changed files with 52 additions and 1 deletions

View file

@ -188,7 +188,7 @@ function buildDecisiveReason({
} }
const CORE_INTENTS_SERVICE_PATTERN = /\b(1click|solver|message bus)\b/i; const CORE_INTENTS_SERVICE_PATTERN = /\b(1click|solver|message bus)\b/i;
const GLOBAL_INTENTS_DISRUPTION_PATTERN = /\b(1click|quoting|solver|message bus|protocol is paused|swaps are paused|all swaps)\b/i; const GLOBAL_INTENTS_DISRUPTION_PATTERN = /\b(1click|solver|message bus|protocol is paused|swaps are paused|all swaps|all quoting)\b/i;
function isRelevantIncident(incident, scope) { function isRelevantIncident(incident, scope) {
if (scope.unfiltered) return true; if (scope.unfiltered) return true;

View file

@ -131,6 +131,57 @@ test('scoped NEAR Intents status ignores unrelated paused destination chains', (
assert.match(normalized.decisive_reason, /BSC, TON, XML/); assert.match(normalized.decisive_reason, /BSC, TON, XML/);
}); });
test('scoped NEAR Intents status ignores HOT-chain quoting and partial bridge maintenance incidents', () => {
const normalized = normalizeNearIntentsStatus({
observedAt: '2026-05-11T18:58:30.605Z',
servicesResponse,
postEnumsResponse,
trackedAssets,
postsResponse: {
posts: [
{
id: 'PIX3ZX5',
title: 'Quoting is temporarily paused for the HOT bridge chains',
post_type: 'incident',
latest_update: {
status_id: 'PSCS3IV',
severity_id: 'P187122',
reported_at: 1778510700000,
impacts: [{ service_id: 'PNEJBRE', severity_id: 'PCIGMKW' }],
message: '<p>This is the list of chains we rely on the Hot Bridge: BSC, MONAD, XLAYER, PLASMA, POL, TON, OP, AVAX, STELLAR, ADI</p>',
},
},
{
id: 'PJ0GZ74',
title: 'Bridge maintenance',
post_type: 'maintenance',
latest_update: {
status_id: 'PSCS3IV',
severity_id: 'P187122',
reported_at: 1778497153000,
impacts: [{ service_id: 'PXQFSY1', severity_id: 'PCIGMKW' }],
message: '<p>We will perform a bridge maintenance, some of the quoting will be temporarily disabled.</p>',
},
},
],
},
});
assert.equal(normalized.status, 'operational');
assert.equal(normalized.label, 'operational');
assert.equal(normalized.current_incident_count, 0);
assert.equal(normalized.observed_incident_count, 2);
assert.equal(normalized.unrelated_incident_count, 2);
assert.equal(normalized.quoting_stopped, false);
assert.deepEqual(normalized.affected_services, []);
assert.deepEqual(
normalized.observed_affected_services,
['Other Blockchains', 'Cross-Chain Bridging'],
);
assert.match(normalized.decisive_reason, /none match this deployment scope/);
assert.match(normalized.decisive_reason, /HOT bridge chains/);
});
test('NEAR Intents status fingerprint is stable across polls and changes on official updates', () => { test('NEAR Intents status fingerprint is stable across polls and changes on official updates', () => {
const first = normalizeNearIntentsStatus({ const first = normalizeNearIntentsStatus({