1.13.0 — Sprint 1 Foundations

What's new in 1.13.0

Sprint 1 foundations: correctness fixes and hardening that every operator and app developer should know about.

Public URL is configurable

The site, API examples, APRS bulletins, and beacon text no longer hardcode aprs.hemna.com (that hostname has no public DNS).

  • New config option: public_url (default https://services.aprslive.com)
  • Templates use {{ public_url }} for copy-paste API examples
  • Bulletins and the station beacon comment use the same value

Callsign / tactical address validation

POST /api/v1/registry and admin create now reject invalid identifiers with HTTP 400.

APRS service names are tactical callsigns, not ITU amateur callsigns. Valid format:

  • 3–9 uppercase alphanumeric characters in the base
  • Optional -SSID (1–2 alphanumeric characters; SSID must not start with 0)
  • Total length (including hyphen + SSID) ≤ 9

Examples that pass: REPEAT, WXBOT, WHO-IS, EMAIL-2, WB4BOR-11, KG5JNC-10.

New registrations start as pending

Brand-new services are stored with status pending until:

  • a successful health check promotes them to active, or
  • an admin changes the status

Re-registration (heartbeat POST with the same callsign) preserves the current status. It will not:

  • un-delete a soft-deleted service
  • activate a pending service by itself
  • resurrect a down service

Deleted services stay deleted until an admin undeletes them.

Scheduled backup and retention

The health-check scheduler can now run maintenance jobs:

  • Retention (default on): delete health-check rows older than retention_days (default 90)
  • Backup (default off): copy the SQLite DB to a timestamped file under backup_dir

See config/registry.conf.example for backup_enabled, backup_dir, backup_interval_hours, retention_enabled, retention_days, and retention_interval_hours.

Docs / FAQ

  • FAQ rate-limit text matches the real limit: 60 requests per minute per IP
  • Operator and developer pages point at services.aprslive.com

Upgrade notes

  1. Set [registry] public_url if you are not using the default public hostname.
  2. Expect new services to appear as pending until the first successful health check (or admin approval).
  3. Enable backup_enabled = true in production if you want nightly (or scheduled) DB copies.

← All posts