{% extends "base.html" %} {% block title %}Discovery — psyc admin{% endblock %} {% block content %}

Peer discovery

{{ candidates|length }} candidate{{ '' if candidates|length == 1 else 's' }}

Walk DNS-SD records from a seed domain you know runs psyc, then recurse through its public peer list. Newly-found peers land here with status unknown — vouching is what eventually promotes them. Once seeds exist, enabling the peer-pull pulse pipeline runs this on a cadence.

← back to federation

{% if flash %}
{{ flash }}
{% endif %}

Seed domains

{{ seeds|length }} configured

One domain per line. Each seed is resolved via _psyc._tcp.<domain> SRV+TXT; its /federation/peers/public is fetched and recursed.

Recent candidates

{{ candidates|length }} in registry

Every peer the walker has ever found, newest first. Trusted/blocked statuses are preserved across re-walks — discovery never demotes a peer the operator has classified.

{% if candidates %} {% for p in candidates %} {% endfor %}
DomainFingerprintStatusDiscoveredLast seenNotes
{{ p.domain }} {{ p.fingerprint[:8] }}…{{ p.fingerprint[-8:] }} {% if p.status == 'trusted' %} trusted {% elif p.status == 'blocked' %} blocked {% else %} {{ p.status }} {% endif %} {{ (p.discovered_at or '')[:16] | replace('T', ' ') }} {{ ((p.last_seen or '')[:16] | replace('T', ' ')) or '—' }} {{ (p.notes or '')[:60] }}
{% else %}

(no candidates yet — add a seed above and walk)

{% endif %}
{% endblock %}