3 Commits

Author SHA1 Message Date
ranger 8b531910f6 v1.0.0 — Stability milestone
No functional change from 0.7.6. Version bump signals that the
public API (wp_usermeta storage shape, 4-button search URL
templates, stations registry shape, dedup + cap + (unknown) skip
rules) is locked. Breaking changes from here go in 2.0.0.

Five days live on wp.org, 50+ downloads, pattern ported to Tuner
(Chrome Web Store live the same day) and Buddy (wp.org r2 review).
The architecture has been validated across two marketplaces and
three family siblings. 0.x semantics no longer accurate.

Same day: Tuner v0.3.0 LIVE on Chrome Web Store ~15.5h after
submission. Radio v1.0.0 ships as the foundation that proved the
pattern.
2026-06-09 21:38:35 +01:00
ranger 63c8c060b2 docs(readme): add shields.io badge row with live wp.org version+downloads+rating+tested-up-to + 44 stations + last-commit + Dublin 2026-06-09 02:36:32 +01:00
ranger 597a645822 v0.7.6 — Plugin metadata cleanup (wp.org pre-review fix)
WordPress.org Plugin Review Team's automated pre-review on
2026-06-03 flagged two metadata-only issues:

1. Ownership verification — ir240474@gmail.com cannot be
   linked to the "RangerHQ" brand by their automated checks
   (gmail accounts can be registered by anyone, so they need
   domain-matched or DNS-verified proof).
2. Plugin URI returning 404 + Author URI failing DNS resolution
   (icanhelp.ie/radio was never a real page; rangersmyth.xyz
   does not resolve).

Both fixed in this release. Zero code changes; metadata only.

Changes:
* Plugin URI: icanhelp.ie/radio → davidtkeane.com/rangerhq-radio
  (real live landing page hosted at the author's canonical
  brand domain)
* Author URI: rangersmyth.xyz → davidtkeane.com
* Version bump 0.7.5 → 0.7.6 across radio.php header,
  RADIO_VERSION constant, readme.txt Stable tag, about.php
  latest slot
* CHANGELOG.md + readme.txt + about.php updated

Ownership verification (domain-side, not in plugin code):
* DNS TXT record `wordpressorg-ir240474-verification` added at
  davidtkeane.com root (Cloudflare). Verified live across
  multiple public DNS resolvers.
* wp.org account email changed from gmail to
  david@davidtkeane.com — domain-matched second proof.

User state (radio_state / radio_history / radio_favourites) is
preserved unchanged across the upgrade because none of these
edits touch storage or scoring logic.
2026-06-03 17:35:14 +01:00
5 changed files with 118 additions and 8 deletions
+86
View File
@@ -9,6 +9,92 @@ Format: [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/) — versi
--- ---
## [1.0.0] — 2026-06-09 — Stability milestone
The plugin reaches version 1.0.0. **There are no functional changes from 0.7.6.** This release is a deliberate version-number signal that the public API is stable.
### What 1.0.0 commits to
From this release forward, the following surfaces are considered the **public API** and will not break in any 1.x release:
- **`wp_usermeta` storage shape**: `radio_state`, `radio_history`, `radio_favourites` — the key names, the per-user model, and the JSON shape of each entry (artist / title / station / station_id / at).
- **The 4-button search URL templates** (`radio_search_urls( $artist, $title )` → spotify / youtube / apple / bandcamp). These have already been ported byte-for-byte to RangerHQ Tuner; locking them here means downstream family members can mirror them indefinitely.
- **The Stations registry shape** (`radio_get_stations_flat()` / `radio_get_stations_grouped()` / `radio_find_station( $id )` return shapes). Custom adapter authors can rely on these.
- **The dedup rule** (sig = lowered `artist|title|station_id`, dedup against the last entry only). This is what `radio_log_track()` enforces; it's stable.
- **The cap rule** (`RADIO_HISTORY_CAP = 500`, FIFO from the front). Stable.
- **The `(unknown)` artist skip** (SomaFM dead-air placeholder is silently dropped from history). Stable.
Breaking changes to any of the above will go in 2.0.0 — not in 1.x.
### Why ship 1.0.0 now
Five days after going live on WordPress.org (2026-06-04) the plugin has 50+ downloads and the architecture has been re-used byte-for-byte by **RangerHQ Tuner** (Chrome Web Store, live 2026-06-09) and structurally re-used by **RangerHQ Buddy** (in wp.org review at time of writing). The pattern has crossed three surfaces (WordPress / Chrome browser / family-shared) and held; the public API is no longer changing every release.
The 0.x version range implicitly meant *"still iterating, might break things."* That is no longer accurate for this codebase. The 1.0.0 number is honest about what the plugin already is in practice: a mature, stable product backed by a proven cross-platform pattern.
### What 1.0.0 does NOT change
- No code touched in any source file
- No new permissions, settings, or admin UI
- No database migration required (storage shape was already locked)
- Existing user state (station / volume / history / favourites) survives intact
- Existing custom CSS / theme integrations continue to work
### Family context
This release ships the same day **Tuner v0.3.0 went LIVE on the Chrome Web Store**. Three RangerHQ family members shipped to or staying-in two marketplaces on 2026-06-09:
- **Radio** v1.0.0 (this release) — wp.org, live
- **Tuner** v0.3.0 — Chrome Web Store, live (the morning of 2026-06-09, ~15.5 hours after submission)
- **Buddy** v0.1.5 — wp.org, in round-2 review
The family pattern is now publicly proven across two platforms.
---
## [0.7.6] — 2026-06-03 — Plugin metadata cleanup (wp.org pre-review fix)
The WordPress.org Plugin Review Team's automated pre-review flagged two issues on 2026-06-03, both metadata-only — none touching the plugin code itself:
1. **Ownership verification** — the `ir240474@gmail.com` account email couldn't be linked to the "RangerHQ" brand by their automated checks. They explicitly call this out as the standard trap for first-time submitters using gmail with brand-flavoured plugin names: *"A gmail.com account cannot be used as a valid form of identification… You could be you, but you could also be anyone else."*
2. **`Plugin URI` returning 404** — the previously declared URL `https://icanhelp.ie/radio` was never published as a real page (it 404'd). Separately, `Author URI: https://rangersmyth.xyz/` was failing DNS resolution entirely (*"Could not resolve host"*).
Both are fixed in this release. None of the user-facing player behaviour, scoring logic, scheme list, or storage layout has changed — this release is strictly housekeeping to satisfy wp.org's identity checks before the human-reviewer pass.
### Changed
- **`Plugin URI:` header in `radio.php`** — `https://icanhelp.ie/radio``https://davidtkeane.com/rangerhq-radio`. The new URL is a real, live, public landing page (Charter serif / moss-green accent / three plugin screenshots / install + source links / recent-changes summary) hosted at the author's personal-brand domain.
- **`Author URI:` header in `radio.php`** — `https://rangersmyth.xyz/``https://davidtkeane.com`. The previous URL was returning a DNS failure; the new URL resolves to the author's existing WordPress site (live since August 2025) and signals brand consistency between the wp.org username, the plugin's brand name, and the author's domain.
- **`Version:` header + `RADIO_VERSION` constant** → `0.7.6`.
- **`readme.txt` Stable tag** → `0.7.6`.
- **`inc/about.php`** — v0.7.6 in the "latest" slot; v0.7.5 demoted to one-liner in earlier-releases list.
### Added (ownership verification — domain-side, not in the plugin code)
- **DNS TXT record at the root of `davidtkeane.com`** containing `wordpressorg-ir240474-verification`. Lives on Cloudflare (which is the authoritative nameserver for the domain). Verified live across multiple public DNS resolvers before this release was prepared.
- **wp.org account email changed** from `david.keane.1974@gmail.com` to `david@davidtkeane.com` — domain-matched to the brand. Provides a second, independent ownership proof on top of the DNS TXT record.
### Why this is the right answer (and the alternatives weren't)
The wp.org reviewer email offered four resolution paths: change wp.org email, transfer to another account, rename the plugin to not look like an entity, or DNS-TXT verify. We took the **DNS-TXT + email-change combination** because:
- Renaming the plugin/slug would lose the "RangerHQ family" branding we'd already locked in at v0.7.5 (the slug is also irrevocable post-approval, so changing it AGAIN would have been costly).
- Transferring to another account would have lost the `ir240474` continuity and existing review thread.
- The author already controls `davidtkeane.com` (locked as the canonical RangerHQ brand domain in May 2026), and Cloudflare-managed DNS for the same domain — adding a TXT record there was a 5-minute operation.
- Setting up `david@davidtkeane.com` and switching the wp.org email to it gave a second independent proof and means all future reviewer correspondence lands at a brand-domain inbox.
The combination gives wp.org's identity bot two independent corroborating signals (DNS proves domain control, branded email proves brand operation). Future RangerHQ-family submissions (a-buddy, a-logbook, rangerhq-spatial, rangerhq-glyph) will skip this round-trip entirely because the trust relationship is now established at the wp.org account level.
### Files changed
`radio.php` · `readme.txt` · `inc/about.php` · `CHANGELOG.md`. Zero changes to `assets/css/radio.css`, `assets/js/radio.js`, or any `inc/*.php` other than `about.php`.
### Migration
None. v0.7.5 installs receive v0.7.6 as a normal update; all user state (`radio_state`, `radio_history`, `radio_favourites`) survives the upgrade unchanged because the metadata changes don't touch storage or scoring logic.
---
## [0.7.5] — 2026-05-30 — WordPress.org slug rename: `a-radio` → `rangerhq-radio` ## [0.7.5] — 2026-05-30 — WordPress.org slug rename: `a-radio` → `rangerhq-radio`
A third-party AI-driven naming-check tool (run via Plugin Check's Claude AI connector against the v0.7.4 build) flagged the slug as too generic for the wp.org Plugin Directory: A third-party AI-driven naming-check tool (run via Plugin Check's Claude AI connector against the v0.7.4 build) flagged the slug as too generic for the wp.org Plugin Directory:
+12 -1
View File
@@ -1,4 +1,15 @@
# Radio — SomaFM player for your WordPress dashboard # 📻 RangerHQ Radio — SomaFM player for your WordPress dashboard
[![wp.org version](https://img.shields.io/wordpress/plugin/v/rangerhq-radio.svg?style=flat-square&color=6dbf7a&label=wp.org&logo=wordpress&logoColor=white)](https://wordpress.org/plugins/rangerhq-radio/)
[![downloads](https://img.shields.io/wordpress/plugin/dt/rangerhq-radio.svg?style=flat-square&color=2a7d3e&logo=wordpress&logoColor=white)](https://wordpress.org/plugins/rangerhq-radio/)
[![rating](https://img.shields.io/wordpress/plugin/rating/rangerhq-radio.svg?style=flat-square&color=6dbf7a)](https://wordpress.org/plugins/rangerhq-radio/)
[![tested up to](https://img.shields.io/wordpress/plugin/tested/rangerhq-radio.svg?style=flat-square&label=tested%20up%20to&color=2a7d3e)](https://wordpress.org/plugins/rangerhq-radio/)
[![PHP](https://img.shields.io/wordpress/plugin/required-php/rangerhq-radio.svg?style=flat-square&logo=php&logoColor=white&color=777BB4)](readme.txt)
[![license](https://img.shields.io/badge/license-GPL%20v2%2B-2a7d3e?style=flat-square)](LICENSE)
[![last commit](https://img.shields.io/gitea/last-commit/ranger/rangerhq-radio?gitea_url=https%3A%2F%2Fgit.davidtkeane.com&style=flat-square&color=6dbf7a)](https://git.davidtkeane.com/ranger/rangerhq-radio/commits/branch/main)
[![SomaFM stations](https://img.shields.io/badge/SomaFM%20stations-44-6dbf7a?style=flat-square)](https://git.davidtkeane.com/ranger/rangerhq-radio/wiki/Stations)
[![no telemetry](https://img.shields.io/badge/telemetry-none-6dbf7a?style=flat-square)](https://git.davidtkeane.com/ranger/rangerhq-radio/wiki/Privacy)
[![made in Dublin](https://img.shields.io/badge/made%20in-Dublin%2C%20Ireland-2a7d3e?style=flat-square)](https://davidtkeane.com)
A small, focused, free WordPress plugin that drops a SomaFM radio player into your admin dashboard. 44 hand-curated stations across 10 genres — ambient, electronic, lounge, rock, metal, jazz, world, reggae, holiday, and specials. A small, focused, free WordPress plugin that drops a SomaFM radio player into your admin dashboard. 44 hand-curated stations across 10 genres — ambient, electronic, lounge, rock, metal, jazz, world, reggae, holiday, and specials.
+3 -2
View File
@@ -79,14 +79,15 @@ function radio_render_about_page() {
<h2><?php esc_html_e( 'Version history', 'rangerhq-radio' ); ?></h2> <h2><?php esc_html_e( 'Version history', 'rangerhq-radio' ); ?></h2>
<div class="radio-about-versions__latest"> <div class="radio-about-versions__latest">
<span class="ver">v0.7.5</span> &mdash; 30 May 2026 <span class="latest"><?php esc_html_e( 'latest', 'rangerhq-radio' ); ?></span> <span class="ver">v0.7.6</span> &mdash; 3 June 2026 <span class="latest"><?php esc_html_e( 'latest', 'rangerhq-radio' ); ?></span>
<p> <p>
<?php esc_html_e( 'WordPress.org slug rename: a-radio → rangerhq-radio. The previous slug was too generic for the directory (single common functional word, no distinguishing prefix); the new slug matches the public display name and lines up with the rest of the RangerHQ plugin family. Text Domain renamed to match across all 125 i18n call sites. Gitea repository moved. No user-visible behaviour change in the player; this is a packaging change only. Internal constants and user-meta keys are unchanged so settings, history, and favourites survive intact.', 'rangerhq-radio' ); ?> <?php esc_html_e( 'Plugin metadata cleanup following the wp.org pre-review feedback. Plugin URI header updated to https://davidtkeane.com/rangerhq-radio (the canonical project landing page, now live). Author URI header updated to https://davidtkeane.com (both old URLs were returning DNS errors or 404). Ownership of the davidtkeane.com domain verified to wp.org via DNS TXT record and a domain-matched account email. No code changes, no user-visible behaviour changes — metadata only.', 'rangerhq-radio' ); ?>
</p> </p>
</div> </div>
<h3><?php esc_html_e( 'Earlier releases', 'rangerhq-radio' ); ?></h3> <h3><?php esc_html_e( 'Earlier releases', 'rangerhq-radio' ); ?></h3>
<ul class="radio-about-versions__earlier"> <ul class="radio-about-versions__earlier">
<li><span class="ver">v0.7.5</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'WordPress.org slug rename: a-radio → rangerhq-radio for family-pattern consistency', 'rangerhq-radio' ); ?></li>
<li><span class="ver">v0.7.4</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'wp.org submission cleanup — removed self-hosted updater + Update URI header (PCP plugin_updater_detected); added LICENSE file + per-asset GPL headers', 'rangerhq-radio' ); ?></li> <li><span class="ver">v0.7.4</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'wp.org submission cleanup — removed self-hosted updater + Update URI header (PCP plugin_updater_detected); added LICENSE file + per-asset GPL headers', 'rangerhq-radio' ); ?></li>
<li><span class="ver">v0.7.3</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'Privacy section in readme + SomaFM terms-of-use link (Update URI guard pattern from this release was walked back in v0.7.4 — Plugin Check disallows it for wp.org-hosted plugins regardless of header value)', 'rangerhq-radio' ); ?></li> <li><span class="ver">v0.7.3</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'Privacy section in readme + SomaFM terms-of-use link (Update URI guard pattern from this release was walked back in v0.7.4 — Plugin Check disallows it for wp.org-hosted plugins regardless of header value)', 'rangerhq-radio' ); ?></li>
<li><span class="ver">v0.7.2</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'Screenshots + correct wp.org contributor handle (ir240474)', 'rangerhq-radio' ); ?></li> <li><span class="ver">v0.7.2</span> <span class="ver-date">30 May 2026</span> &mdash; <?php esc_html_e( 'Screenshots + correct wp.org contributor handle (ir240474)', 'rangerhq-radio' ); ?></li>
+4 -4
View File
@@ -3,13 +3,13 @@
* RangerHQ Radio — a small, focused internet radio player for your WP dashboard. * RangerHQ Radio — a small, focused internet radio player for your WP dashboard.
* *
* Plugin Name: RangerHQ Radio * Plugin Name: RangerHQ Radio
* Plugin URI: https://icanhelp.ie/radio * Plugin URI: https://davidtkeane.com/rangerhq-radio
* Description: A small, focused internet radio player for your WordPress admin. 44 hand-curated stations from SomaFM across 10 genres — ambient, electronic, lounge, rock, metal, jazz, world, reggae, holiday, specials. Plays via HTML5 audio; per-user station + volume + history + favourites; pop-out window for continuous background play. * Description: A small, focused internet radio player for your WordPress admin. 44 hand-curated stations from SomaFM across 10 genres — ambient, electronic, lounge, rock, metal, jazz, world, reggae, holiday, specials. Plays via HTML5 audio; per-user station + volume + history + favourites; pop-out window for continuous background play.
* Version: 0.7.5 * Version: 1.0.0
* Requires at least: 5.3 * Requires at least: 5.3
* Requires PHP: 7.4 * Requires PHP: 7.4
* Author: David Keane * Author: David Keane
* Author URI: https://rangersmyth.xyz/ * Author URI: https://davidtkeane.com
* License: GPL v2 or later * License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html * License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: rangerhq-radio * Text Domain: rangerhq-radio
@@ -27,7 +27,7 @@
if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! defined( 'ABSPATH' ) ) { exit; }
// Plugin coordinates. // Plugin coordinates.
if ( ! defined( 'RADIO_VERSION' ) ) { define( 'RADIO_VERSION', '0.7.5' ); } if ( ! defined( 'RADIO_VERSION' ) ) { define( 'RADIO_VERSION', '1.0.0' ); }
if ( ! defined( 'RADIO_FILE' ) ) { define( 'RADIO_FILE', __FILE__ ); } if ( ! defined( 'RADIO_FILE' ) ) { define( 'RADIO_FILE', __FILE__ ); }
if ( ! defined( 'RADIO_PATH' ) ) { define( 'RADIO_PATH', plugin_dir_path( __FILE__ ) ); } if ( ! defined( 'RADIO_PATH' ) ) { define( 'RADIO_PATH', plugin_dir_path( __FILE__ ) ); }
if ( ! defined( 'RADIO_URL' ) ) { define( 'RADIO_URL', plugin_dir_url( __FILE__ ) ); } if ( ! defined( 'RADIO_URL' ) ) { define( 'RADIO_URL', plugin_dir_url( __FILE__ ) ); }
+13 -1
View File
@@ -4,7 +4,7 @@ Donate link: https://buymeacoffee.com/davidtkeane
Tags: radio, music, audio, internet radio, background music Tags: radio, music, audio, internet radio, background music
Requires at least: 5.3 Requires at least: 5.3
Tested up to: 7.0 Tested up to: 7.0
Stable tag: 0.7.5 Stable tag: 1.0.0
Requires PHP: 7.4 Requires PHP: 7.4
License: GPLv2 or later License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -86,6 +86,12 @@ SomaFM's track-info endpoint (`somafm.com/songs/{station}.json`) is fetched best
== Changelog == == Changelog ==
= 1.0.0 =
* Stability milestone. Same code as 0.7.6, no functional changes — but the version number now signals what the wp.org listing already shows in practice: the architecture (per-user `wp_usermeta` storage shape, 4-button search URL templates, station catalogue format, history dedup rule) is stable. From 1.0.0 forwards, breaking changes go in 2.0.0; everything in 1.x will preserve the public API. Released after five days live on wp.org, 50+ downloads, and the family pattern (per-user storage, four-button search) proven and ported to RangerHQ Tuner (Chrome Web Store) and RangerHQ Buddy (in wp.org review).
= 0.7.6 =
* Plugin metadata cleanup following the wp.org pre-review feedback. `Plugin URI` header updated from `https://icanhelp.ie/radio` to `https://davidtkeane.com/rangerhq-radio` (the canonical project page, now live). `Author URI` header updated from `https://rangersmyth.xyz/` to `https://davidtkeane.com` (both old URLs were returning DNS errors or 404). Ownership of the davidtkeane.com domain has been verified to wp.org via DNS TXT record and a domain-matched account email. No code changes, no user-visible behaviour changes — metadata only.
= 0.7.5 = = 0.7.5 =
* WordPress.org slug rename: `a-radio` → `rangerhq-radio`. The previous slug was flagged as too generic for the wp.org Plugin Directory (single common functional word, no distinguishing prefix). The new slug matches the public display name "RangerHQ Radio" and lines up with the rest of the RangerHQ plugin family (`rangerhq-spatial`, `rangerhq-glyph`). Text Domain renamed to match — all 125 i18n call sites updated. Gitea repository moved to https://git.davidtkeane.com/ranger/rangerhq-radio. No user-visible behaviour change in the player; this is a packaging change only. Plugin Name stays "RangerHQ Radio"; internal constants (`RADIO_*`) and user-meta keys (`radio_state` / `radio_history` / `radio_favourites`) are unchanged so settings + history + favourites all survive intact. * WordPress.org slug rename: `a-radio` → `rangerhq-radio`. The previous slug was flagged as too generic for the wp.org Plugin Directory (single common functional word, no distinguishing prefix). The new slug matches the public display name "RangerHQ Radio" and lines up with the rest of the RangerHQ plugin family (`rangerhq-spatial`, `rangerhq-glyph`). Text Domain renamed to match — all 125 i18n call sites updated. Gitea repository moved to https://git.davidtkeane.com/ranger/rangerhq-radio. No user-visible behaviour change in the player; this is a packaging change only. Plugin Name stays "RangerHQ Radio"; internal constants (`RADIO_*`) and user-meta keys (`radio_state` / `radio_history` / `radio_favourites`) are unchanged so settings + history + favourites all survive intact.
@@ -133,6 +139,12 @@ SomaFM's track-info endpoint (`somafm.com/songs/{station}.json`) is fetched best
== Upgrade Notice == == Upgrade Notice ==
= 1.0.0 =
Stability milestone — same code as 0.7.6, version number now signals what the plugin already is in practice: mature. From 1.0.0 onwards the public API (storage shape, search URL templates, station data format) is locked; breaking changes will go in 2.0.0. No behaviour change in this update.
= 0.7.6 =
Metadata-only update: Plugin URI + Author URI updated to davidtkeane.com following wp.org pre-review feedback. No code changes, no behaviour change.
= 0.7.5 = = 0.7.5 =
WordPress.org slug renamed `a-radio` → `rangerhq-radio` (lines up with display name "RangerHQ Radio" and the family pattern). Text Domain matches. No player behaviour change. Existing user state (station / volume / history / favourites) survives intact. WordPress.org slug renamed `a-radio` → `rangerhq-radio` (lines up with display name "RangerHQ Radio" and the family pattern). Text Domain matches. No player behaviour change. Existing user state (station / volume / history / favourites) survives intact.