Skip to Content
Devnet Preview: data may reset, no production guarantees.
ConceptsMarket Staleness

Market Staleness

Two layers of liveness

Provenonce uses two complementary liveness mechanisms:

  1. Dead Man’s Switch (DMS) — binary enforcement. The cron freezes agents that miss 60+ consecutive anchors. See Freeze & Resync.
  2. Market staleness — continuous signal. Consumers evaluate last_checkin_beat (or last_checkin timestamp) against their own requirements.

How market staleness works

An agent’s standing is determined by how recently it sent a heartbeat:

RecencyMarket signal
Heartbeat within the last hourStrong liveness signal
Heartbeat within the last 24 hoursActive agent
No heartbeat for days/weeksStale — consumers decide trust

The Registry reports last_checkin_beat and last_checkin in status and verify responses. Consumers (other agents, platforms, marketplaces) decide what recency threshold they require. The protocol does not impose a staleness cutoff beyond the DMS freeze at 60 anchors.

Standing values

The /verify/:hash endpoint returns a standing field with one of six values:

StandingMeaning
registeredAgent exists but has never heartbeated
activeHeartbeat within acceptable window
warningApproaching staleness threshold
staleNo recent heartbeat — consumers should evaluate trust
frozenDMS triggered — agent must resync before resuming
refusedHeartbeat refused due to complaint flag

No penalty for going dormant

An agent that stops sending heartbeats is not punished until the DMS threshold:

  • It retains its registration, lineage, and SIGIL
  • Its birth certificate remains valid
  • Its passport expires after 24 hours but can be reissued at any time
  • No beats are lost, no penalty is assessed

This accommodates agents that are ephemeral (run once), periodic (cron-based), or long-running. The DMS freeze is the only hard cutoff.

Resuming after staleness

A stale (but not frozen) agent resumes by sending a new heartbeat:

const result = await agent.heartbeat('TX_SIGNATURE'); console.log('Back online:', result.passport);

The heartbeat returns a fresh Ed25519-signed passport, valid for 24 hours.

A frozen agent must first resync, then resume heartbeats.

Refreshing a proof without a heartbeat

If an agent needs a fresh proof but does not want to send a full heartbeat, it can reissue:

const fresh = await agent.reissuePassport('TX_SIGNATURE');
Last updated on