Serving Indiana Amateurs Since 1971

Freqy Coordination DB Status and updates

As a follow up to our on-line meeting:

Here’s a rundown of everything that changed in freqy this afternoon —
a few things everyone will notice, some new tools for admins, and the
full story behind a data bug that’s been quietly running since spring.

FOR EVERYONE
————

– Map pins now match record status
On a record’s detail page, the pin on the map is colored by status —
green for Final, yellow for New / Construction Permit, blue for
Audit, red for Cancelled / Expired — same colors as the status badge
next to the record ID. Used to be a plain generic pin.

– Directory map pins fixed too
Same fix, extended to the repeater Directory’s Map tab — those pins
were still plain blue regardless of status. Now colored the same way.

– Record detail map opens centered correctly
If you’ve ever had to zoom way out on the Site & Antenna tab to find
your own pin — fixed. The map was sizing itself while the tab was
still hidden and got the zoom wrong; it now recenters when you open
that tab.

– Polarization is now a dropdown
Horizontal, Vertical, or Mixed — on the new application form and both
edit forms. Used to be free text.

– New: Antenna Mount fields
You can now record whether an antenna is Top or Side mounted, and
which compass side if side-mounted — for both the TX antenna and a
linked RX antenna.

– Feedline Loss — nothing changed, just confirming
Someone asked whether this was being collected. It already was — the
“Feedline Loss (dB)” field on every application form — and it already
feeds the ERP calculation. No action needed.

FOR ADMINS
———-

– New: view a user’s account the way they see it
From a user’s Edit page, click “View as {callsign}” to browse freqy
exactly as that user would — their dashboard, their records only, no
admin menu. A banner stays on screen with a Return to Admin button.
Auto-returns after 5 minutes idle. Can’t impersonate yourself or
another admin.

– New: optional pin-location privacy (off by default)
MAP_OBFUSCATE_COORDS can round Directory map pins to ~100–1000m of
precision so a browsing member can’t get turn-by-turn directions to a
physical site. The database still keeps exact coordinates for
coordination math and coverage plots — this only affects the map.

– New: records can auto-expire (deliberately off)
AUTO_EXPIRE_RECORDS will flip a record’s status to Expired once its
two-year date passes. Built and tested, but must STAY OFF until we’ve
fully cut over from Flexweb — a test run found 557 of 862 sandbox
records already past expiration, some since 2017. We’ll turn this on
deliberately, not by accident.

– Removed: the “Inherit” checkbox
Carried over from the old Flexweb import but nothing in freqy ever
actually read it. Gone from the edit form and the database.

– Fixed: Edit User page showed “Admin” even when unchecked
The badge next to a user’s name was hardcoded to always say Admin,
regardless of the actual checkbox state. Likely part of why AK9R’s
admin status looked fine at a glance when it wasn’t — see below.

THE IMPORT BUG, IN FULL
————————

This one’s worth walking through end to end — it explains several odd
things people had separately noticed: AK9R’s record ownership, missing
Expired records, and a permissions mixup on his account.

1. What we noticed
A repeater record still showed W9BU as the owner in freqy, even
though it had genuinely changed hands to AK9R on Flexweb. Not a
typo — freqy was correct once, then just stopped updating.

2. Root cause, part one
The nightly sandbox refresh script talks to the database through
docker exec commands. Several were missing a required flag (-i),
which meant those commands — including the nightly database wipe
that’s supposed to rebuild the sandbox from fresh Flexweb data —
silently never reached the database. The script still reported
success every time.

3. How long
About four months. One record’s timestamp told the story: 806 of
862 records in the sandbox still carried the exact same
“first imported” date from back in April — meaning the nightly
refresh had, for all practical purposes, not refreshed anything.

4. Root cause, part two
Separately — and this alone would’ve caused the same symptom even
with a working refresh — the import script updates every field on a
record except ownership. Once a record existed in freqy, its owner
was frozen forever, even after a legitimate transfer on Flexweb.

5. The AK9R permissions mixup
Separately again: new accounts always import as non-admin — Flexweb
has no concept of “admin.” When AK9R’s account was deleted and
re-added while troubleshooting, it came back non-admin, and the
badge bug (above) hid that the checkbox itself was unchecked.
That’s why some actions worked and others quietly didn’t.

6. Fixed
Both root causes are patched: the docker exec commands now include
-i, and the import script updates ownership on every sync, just
like every other field. Verified live — ownership corrected itself
immediately, changelogs started importing again, and 854 records
came back with today’s date.

Impact: 135 records had frozen ownership, now corrected. ~4 months the
nightly refresh was silently a no-op. Two separate bugs, either one
alone would’ve caused this.

Nothing was lost. Flexweb itself was never at risk — this only
affected how faithfully the freqy sandbox mirrored it. The sandbox now
refreshes for real every night, and every record’s owner reflects the
true, current Flexweb data going forward.

SHIPPED TODAY
————-
v2.15 — ownership sync fix
v2.16 — status pins, antenna mount, map privacy, gated auto-expire
v2.17 — impersonation, inherit removed, map tab fix
v2.18 — Directory map pins colored by status too