02 — Architecture
Account, interaction, network.
Three layers. A latent behavioral state of accounts, edges, and events, consumed as a private probabilistic prior — never as a public score.
What the system is allowed to believe
Not bot / not-bot. A small taxonomy of participation:
- verified unique human (optional proof-of-personhood, separate system)
- likely independent human
- human-assisted agent
- declared agent
- automated service
- coordinated / inauthentic cluster
Banning every machine is the wrong product. The heartbeat exists so unlabeled optimization loops cannot pretend they are people.
Layer 1 — Account pulse
Treat an account as a marked point process plus a slowly changing latent state. Actions arrive at times tᵢ with marks (type, target, text, client, dwell, edits).
sᵤ(t) is a latent behavioral state. The system does not know whether somebody is fatigued, angry, watching television, or using an accessibility device. Observed manifestations: session progression, interaction density, latency distributions, topic transitions, editing patterns. Humans are non-stationary even inside one session. Bots are close to stationary unless someone spends money faking drift.
Estimated factors, not a dashboard:
| Factor | What it scores |
|---|---|
| T temporal | Conditional latency, not raw delay. |
| R reaction | Response to surprise: correction, joke, disagreement. |
| S semantic | Tracking the thread versus matching keywords. |
| C continuity | Follow-ups, abandoned thoughts, self-corrections. |
| E entropy | Structured irregularity: log-normal gaps, circadian, burstiness. |
| G graph | Asymmetric reciprocity. One-sided, decaying, uneven. |
| A automation | Template mass, client regularity, API cadence. |
| D drift | Change in latent state that is explained by context. |
| I independence | Residual independence given stimulus and feed. |
| CI counterfactual | Predictive lift of a cluster residual after the stimulus shown. |
Output is a posterior over the taxonomy, not a binary expectation:
zᵤ ∈ {human, human+agent, declared-agent, service, coordinated}. Liveness is a functional of that posterior. Mixture accounts are the default future.
Mismatch across timescales is the catch: language human, sleep human, drift absent, relationships synchronized, timing optimized — liveness collapses even if each slice looks fine.
Cold start is the hole. New accounts have no pulse, and that is when bots are born. Lᵤ needs a weakly informative prior and a wide credible interval, not a ban. A point of 0.72 with interval [0.31, 0.94] is “do nothing.”
Layer 2 — Interaction pulse
An edge is not “A replied to B.” It is a signature:
Classify the edge: human→human, human→agent, agent→human, agent→agent, cluster→stimulus. Higher-order traces — co-reply, co-repost, near-simultaneous reaction to the same item — are where botnets still leak.
Layer 3 — Network pulse
This is the part worth the word heartbeat. An event E enters N timelines. Measure the reaction field:
Organic pulse: heavy-tailed, desynchronized, lots of non-response, some people coming back hours later. Synthetic injection: compressed, correlated microstructure, even if the operator smoothed the outer envelope. You can hide a square wave. It is much harder to hide the missing interior.
The field is streaming. Ranking at time t may only see P(E, [t−W, t)), never the reaction that has not happened yet.
Algorithmic pulse
Outside detectors only see responses. A platform knows the stimulus. After a ranking change:
Did human↔human conversation rise? Did agent↔agent loops rise? Did residual coupling across supposedly independent viewers rise? Did CI lift after controlling for the feed actually shown? That is a better offline metric than “more likes.”
Tiny ranking perturbations as probes are theoretically clean and product-dangerous. Shadow experiments on a slice. Never a user-facing challenge. If people can feel the probe, it is a CAPTCHA and it will be trained against.