Skip to main content

What is a TAP?

A Thumbprint Affinity Snapshot (TAP) is a radial plot that encodes the pairwise agreement between any two entities across a set of policy or governance dimensions. It is the visualization layer of the Populist Protocol. The geometry is proprietary to Co-Mission.

The encoding

Each dimension k maps to an angular position θₖ on a unit circle (evenly distributed, starting at top). The voter’s (or entity’s) position on each dimension is encoded as:
φₖ = θₖ − aₖ · π/2
Where:
  • θₖ — spoke angle for dimension k (evenly distributed, 0 at top)
  • aₖ ∈ [0, 1] — agreement coefficient (1 = full agreement, 0 = full disagreement)
  • φₖ — actual plotted angle (displaced π/2 from θₖ on disagreement)
  • Magnitude = vote certainty or cohort majority strength
Agreement (aₖ = 1): point plots at θₖ — sits on the spoke. Disagreement (aₖ = 0): point plots at θₖ − π/2 — displaced clockwise by a quarter turn.

Scallop-shell geometry

The characteristic shape — where a voter who agrees on all dimensions fills the full radial area between spokes, and disagreements collapse to the clockwise adjacent sector — is the TAP’s visual fingerprint. Two voters with identical positions produce identical shapes.
        0° (top)

        │  agreements cluster here
   ┌────┼────┐
   │  ╱ │ ╲  │
   │╱   │   ╲│
←──┼────●────┼──→ 90°
   │╲       ╱│  ↑ disagreements displace here
   │  ╲   ╱  │
   └────┴────┘

        ▼ 180°

Entity-agnostic

The encoding is identical regardless of entity type:
  • voter vs. politician (ideological alignment by expertise)
  • voter vs. cohort (how your views compare to a demographic group)
  • delegate vs. governance category (DAO accountability track record)
  • any two entities that have voted on common dimensions
Only context.domain and the dimension labels change between deployments.

TAP modes

ModeDescription
1_to_manyOne subject (voter or delegate) plotted against N comparison entities
1_to_1_subscopedOne subject vs. one comparison entity, with parallel dimension panels

Rendering

TAPs are rendered as SVG using the template in taps/templates/tap.svg.tpl. The React component useTap.js computes SVG-ready coordinates from a TAP JSON payload. See Vote Methods for how aₖ is computed from different ballot types.

Reserved tap_types

Two tap_type values are reserved Co-Mission products. If your config uses either, checkReservedConfig(config) returns a notice with a link to the respective product — it’s a pointer, not a block.
tap_typeProductContact
"election"sedahaqq.com — Seda HaqqLicensing conversation
"referendum"youinpolitics.com — Pop-u-listLicensing conversation
All other values ("legislation", "ballot_measure", "advisory", or any custom string) are freely usable under an SDK license with no notice triggered. See taps/DISCLOSURE.md for the full notice and business model explanation.