Skip to content

Releases: johnjanney/social-relay

Social Relay 0.3.1 — meta box buttons work in the block editor

Choose a tag to compare

@johnjanney johnjanney released this 06 Sep 11:43
7bdbc78

Fixes the meta box buttons in the block editor. Upgrade from 0.3.0 is recommended.

Install

Download social-relay-0.3.1.zip below, then in WordPress: Plugins → Add New → Upload Plugin. Upgrading from any earlier version is a plain overwrite — no migration runs, and your settings are preserved.

Requires WordPress 6.5+ and PHP 8.2+.

sha256  599addee23eb1505e710a539ac42156918ac4f75824e6ad1e88c3e59217dbfda

What was wrong in 0.3.0

All three buttons in the Social Relay box on the post edit screen — Cancel scheduled post, Repost now, and the new Post to X now — did nothing in the block editor, which has been the default editor since WordPress 5.0. You clicked, accepted the confirmation, and nothing happened. They were submit buttons inside the meta box form; the block editor wraps that form so submits are swallowed, and its own save carries only the fields, never a button. They only ever worked in the classic editor.

What changed

Each button is now a link to a nonce-protected handler that performs the action and returns you to the editor. Works in both editors. One thing to know: the page reloads, so save first. Because the link bypasses the editor's save, both paid confirmations now say that unsaved edits are not included — if you have just fixed a typo, press Update before you repost.

Verified end to end over HTTP on a real block-editor site, which is the check the test suite had lacked.

Read this before you turn it on

No post from this plugin has reached X in production, and the POST /2/tweets path is still untested against the live API. Press "Send test post" on the settings page before relying on it, or use "Post to X now" on any existing post — either one settles the two open questions about the create-post endpoint.

Versioning

PATCH under VERSIONING.md. A bug fix; one admin_post action added, which the document names as not breaking. No settings key, post meta key, table column, floor or published hook changes. schema_version stays at 1.

Verification

php -l, every file                    clean
vendor/bin/phpcs                      clean
vendor/bin/phpstan analyse            [OK] No errors
phpunit, full suite (PHP 8.2/WP 6.5)  OK (185 tests, 759 assertions)
CI: PHP 8.2 + 8.4, WP 6.5 + latest    all green
bin/check-version.sh                  four version strings agree; tag matches
bin/build.sh                          26 files, no dev or spec files

Full detail in CHANGELOG.md.

Full Changelog: v0.3.0...v0.3.1

Social Relay 0.3.0 — manual send for any published post

Choose a tag to compare

@johnjanney johnjanney released this 06 Sep 04:19
9dea6a2

Adds a manual send for any published post. One new button, no new settings.

Install

Download social-relay-0.3.0.zip below, then in WordPress: Plugins → Add New → Upload Plugin. Upgrading from 0.2.0 or 0.1.0 is a plain overwrite — no migration runs, and your settings are preserved.

Requires WordPress 6.5+ and PHP 8.2+.

sha256  375a43ab6d283f44109d3d244852e5fef2ca8a6b5c07a1ce9a3ac802a3c52609

Read this before you turn it on

This is the current stable release and the version readme.txt serves. "Stable" here means the code is released and verified by the test suite — not that a post has been observed landing on X.

No post from this plugin has reached X in production, and the POST /2/tweets path is still untested against the live API.

Press "Send test post" on the settings page before relying on it. That one click exercises credentials, signing and the create-post endpoint, and it settles two open questions at once — including whether an App outside a Project can write, which a developer-forum report suggests may return HTTP 403 on precisely this endpoint. With this release, "Post to X now" on any existing post is a second way to run that same live test, with a real post.

What's new

"Post to X now" appears in the Social Relay box on any published post whose status is Not scheduled or Cancelled — everything you published before the plugin was installed, anything that came in through an import or a bulk edit, a post you published with the box unticked, or one you cancelled and now want after all.

It asks you to confirm, then goes out at the next scheduler run rather than after the usual delay, billed like any other post. It uses the same scheduler and the same at-most-once check as an automatic send: it is a first send, not a second. The button does not appear on a post that is already Sent — for that, and only that, there is still "Repost now" — and not on a draft, which has no public link to send.

One behaviour change to "Repost now". Both buttons now tick the post's "Post to X" box for you. The button submits the whole box with it, so on a site whose master switch was off, an unticked checkbox was being stored a moment before the click was handled and the send you had just confirmed was cancelled with "Per-post switch was turned off". A confirmed click now outranks the checkbox.

Recorded as brief amendment 3 (FR-2.6), spec amendment 2 (TR-16) and ADR-006.

Versioning

MINOR under VERSIONING.md. New functionality, and nothing on that document's exhaustive breaking list applies: no settings key, hook, post meta key, table column or floor changes. The one new write is to the existing _srl_enabled key with a value it already takes, so no existing post's recorded state can be misread. schema_version stays at 1.

Verification

php -l, every file                    clean
vendor/bin/phpcs                      clean
vendor/bin/phpstan analyse            [OK] No errors
phpunit, full suite (PHP 8.2/WP 6.5)  OK (185 tests, 752 assertions)
CI: PHP 8.2 + 8.4, WP 6.5 + latest    all green
bin/check-version.sh                  four version strings agree; tag matches
bin/build.sh                          26 files, no dev or spec files

Full detail in CHANGELOG.md.

Full Changelog: v0.2.0...v0.3.0

Social Relay 0.2.0 — hashtags from post tags

Choose a tag to compare

@johnjanney johnjanney released this 06 Sep 03:46
09ccf1f

Adds hashtags built from the post's own tags. Off by default.

Install

Download social-relay-0.2.0.zip below, then in WordPress: Plugins → Add New → Upload Plugin. Upgrading from 0.1.0 is a plain overwrite — no migration runs, and your settings are preserved.

Requires WordPress 6.5+ and PHP 8.2+.

sha256  12c66a7f272d379442de4124d73d4236fc7a5e34cdce0b40a1174e57a75f14a3

Read this before you turn it on

This is the current stable release and the version readme.txt serves. "Stable" here means the code is released and verified by the test suite — not that a post has been observed landing on X.

No post from this plugin has reached X in production, and the POST /2/tweets path is still untested against the live API.

Press "Send test post" on the settings page before relying on it. That one click exercises credentials, signing and the create-post endpoint, and it settles two open questions at once — including whether an App outside a Project can write, which a developer-forum report suggests may return HTTP 403 on precisely this endpoint.

What's new

Turn hashtags on under Settings → Social Relay → Hashtags. The post's own tags are appended, three at most by default.

A hashtag cannot contain a space, and X stops reading one at the first space or punctuation mark — so tags are joined and capitalised rather than merely stripped. That is the difference between a hashtag that works and one that is quietly wrong:

Your tag Posted Stripping spaces alone would give
machine learning #MachineLearning #machinelearning
iPhone SE #iPhoneSE #iphonese
co-op #CoOp #co — cut at the hyphen
rock 'n' roll #RockNRoll #rock — cut at the apostrophe
2026 nothing #2026, which X will not link

Capitalisation you typed is preserved, so iPhone SE is not flattened to #IphoneSe.

Hashtags never cost you words. If the post would exceed X's 280-character limit, hashtags are removed one at a time, whole, from the end. Your title is shortened only after every hashtag is gone — so a long title may post with fewer hashtags than it has tags, or none. That is the plugin protecting your title, not a fault.

Two new settings, both with safe defaults: hashtags_enabled (off) and hashtags_max (3, maximum 10).

Versioning

MINOR under VERSIONING.md. New functionality, and nothing on that document's exhaustive breaking list applies — the new settings keys carry safe defaults, which it names explicitly as not breaking, so schema_version stays at 1 and no migration runs.

0.1.0 remains flagged a pre-release: it was never a stable release, and reclassifying it now would rewrite that history.

Verification

php -l, every file                    clean
vendor/bin/phpcs                      clean
vendor/bin/phpstan analyse            [OK] No errors
phpunit, full suite (PHP 8.2/WP 6.5)  OK (181 tests, 717 assertions)
CI: PHP 8.2 + 8.4, WP 6.5 + latest    all green
bin/check-version.sh                  four version strings agree; tag matches

Full detail in CHANGELOG.md.

Full Changelog: v0.1.0...v0.2.0

Social Relay 0.1.0 — first packaged build

Choose a tag to compare

@johnjanney johnjanney released this 06 Sep 01:33
08fd0ff

First packaged build of Social Relay.

This is a pre-release. It has never posted to X in production. Everything below is verified against the specification and against real WordPress, which is not the same thing as verified in production.

What it does

Publishes the title, featured image and permalink of each newly published WordPress post to one X account, after a configurable delay — with no duplicate posts and no silent failures.

Before you install: this costs money

X ended its free API tier for new developers in February 2026, and every real post this plugin makes contains a link, which is the expensive case.

What Price
A post with a link — every real post this plugin makes $0.200
A post without a link ("Send test post") $0.015
"Check credentials" about $0.010

Roughly posts per month × $0.20. Twenty posts a month is about $4; five hundred is about $100. Read INSTALLATION.md before you buy credits.

Install

Download social-relay-0.1.0.zip below, then Plugins → Add New → Upload Plugin.

The master switch is off after activation, so nothing posts until you configure it and turn it on deliberately.

Requires WordPress 6.5+ and PHP 8.2+.

What is verified

Check Result
PHPCS (WordPress Coding Standards) clean
PHPStan level 6 clean
Test suite 172 tests, 686 assertions
WordPress 6.5 / PHP 8.2 passing
WordPress 7.1 / PHP 8.4 passing
Installs and activates from this zip verified on a real site
Uninstall leaves nothing behind verified on a real site

The plugin was reviewed twice by independent sessions — a specification review (29 findings) and a code review (16 findings, one blocker). All 45 were applied. Both reviews are in reviews/.

What is not verified

Stated plainly, because a release that hides this is worse than one that admits it:

  • Never exercised against the live X API beyond a Phase 0 authentication probe. No post from this plugin has ever reached a timeline.
  • X Developer Console steps were not walked. INSTALLATION.md steps 1–3 come from official documentation. Every step in that file carries a mark saying whether it was actually performed.
  • The cron chain is only partly proven. wp-cron.php responds correctly and sends no-cache headers, and the plugin's heartbeat works — but an external HTTP request causing due jobs to run was not demonstrated end to end in the test environment. Step 8 of INSTALLATION.md is how you confirm it on your own site.
  • Image downscaling is not implemented. Images over 5 MB are skipped with a recorded reason rather than resized; the post still goes out without the image.
  • No extended live run. A seven-day staging run is planned and has not happened.

Documentation

GPL-2.0-or-later.