Notify users of new blog posts.
  • PHP 94.7%
  • Shell 4%
  • JavaScript 0.9%
  • Dockerfile 0.4%
Find a file
alan 28d67996e4
All checks were successful
CI / PHP 8.5 (push) Successful in 11s
CI / PHP 8.4 (push) Successful in 11s
CI / WordPress 7.0.6 / Email Verification 0.3.4 (push) Successful in 29s
CI / JavaScript (push) Successful in 30s
CI / WordPress 7.0.6 / Email Verification 1.0.2 (push) Successful in 2m36s
CI / WordPress 7.1.2 / Email Verification 1.0.2 (push) Successful in 2m37s
CI / WordPress 7.1.2 / Email Verification 0.3.4 (push) Successful in 2m37s
CI / Distribution package / Plugin Check (push) Successful in 1m3s
Merge pull request 'Add alpha5 structured audit events' (#21) from feature/alpha5-audit-events into main
Reviewed-on: #21
2026-09-28 17:27:59 +00:00
.forgejo/workflows Raise WP-CLI memory limit in package CI 2026-09-25 10:42:51 -04:00
.github Migrate CI to Forgejo Actions 2026-09-14 22:19:27 -04:00
assets Add alpha4 public subscribe block 2026-09-26 05:18:34 -04:00
bin Modernize alpha2 repository and release tooling 2026-09-15 10:12:06 -04:00
blocks/subscribe Begin alpha5 registered user preferences 2026-09-26 09:09:38 -04:00
build Add alpha4 public subscribe block 2026-09-26 05:18:34 -04:00
ci/images Pin Forgejo CI to shared PHP images 2026-09-15 08:51:03 -04:00
scripts Update CI, add PCP 2026-09-25 10:36:41 -04:00
src Add alpha5 structured audit events 2026-09-28 12:03:53 -04:00
tests Fix schema two integration qualification 2026-09-28 13:24:17 -04:00
.editorconfig Add Post Notifier development scaffold 2026-07-29 18:40:41 -04:00
.gitattributes Add Post Notifier development scaffold 2026-07-29 18:40:41 -04:00
.gitignore Raise minimum PHP version to 8.4 2026-07-29 21:47:52 -04:00
AGENTS.md Freeze schema one upgrade contract 2026-09-25 11:43:07 -04:00
ARCHITECTURE.md Add alpha5 structured audit events 2026-09-28 12:03:53 -04:00
argentwolf-post-notifier.php Begin alpha5 registered user preferences 2026-09-26 09:09:38 -04:00
autoload.php Resolve Plugin Check package findings 2026-09-25 10:48:45 -04:00
CHANGELOG.md Add alpha5 structured audit events 2026-09-28 12:03:53 -04:00
composer.json Add alpha3 database foundation 2026-09-15 12:36:50 -04:00
composer.lock Raise minimum PHP version to 8.4 2026-07-29 21:47:52 -04:00
LICENSE Document post notifier architecture and milestones 2026-07-28 23:49:53 -04:00
package-lock.json Begin alpha5 registered user preferences 2026-09-26 09:09:38 -04:00
package.json Begin alpha5 registered user preferences 2026-09-26 09:09:38 -04:00
phpcs.xml.dist Add Post Notifier development scaffold 2026-07-29 18:40:41 -04:00
phpunit.integration.xml.dist Align PHPUnit with WordPress 7.0 2026-07-29 20:54:15 -04:00
phpunit.xml.dist Align PHPUnit with WordPress 7.0 2026-07-29 20:54:15 -04:00
README.md Add alpha5 structured audit events 2026-09-28 12:03:53 -04:00
readme.txt Add alpha5 structured audit events 2026-09-28 12:03:53 -04:00
TODO.md Add alpha5 structured audit events 2026-09-28 12:03:53 -04:00
uninstall.php Tranche 2 2026-09-15 15:01:38 -04:00
webpack.config.cjs Add Post Notifier development scaffold 2026-07-29 18:40:41 -04:00

ArgentWolf Post Notifier

ArgentWolf Post Notifier is a planned GPL-licensed WordPress plugin for sending verified, unsubscribe-capable email notifications when posts are actually published.

The project is now in 0.1.0-alpha.5 development after completing the standalone-subscriber milestone. The verification-provider contract, lifecycle/tooling foundation, frozen schema-1 data foundation, public double-opt-in subscriber flow, limited pending cleanup, and subscriber administration are present. Alpha.5 now includes typed registered-user notification preferences, a self-service WordPress profile control, canonical global email suppression, secure standalone management, administrator-managed named lists, and a reusable audience-policy layer. That layer accepts role-expanded users, named lists, and explicit typed include/exclude contacts, then applies canonical email normalization, deterministic cross-source merge rules, eligibility, and final global suppression. Alpha.5 also includes bounded, administrator-approved CSV intake that sends double-opt-in invitations and never imports a contact directly into subscribed. Alpha.5 also records structured list and suppression audit events in schema 2 without storing raw email addresses or bearer tokens. Campaign snapshot persistence remains a later milestone. Dedicated management capabilities remain later alpha.5 work. The intended public distribution channel, once the plugin is complete and operational, is the WordPress.org Plugin Directory.

Development requirements

  • WordPress 7.0 or newer;
  • PHP 8.4 or newer;
  • Composer 2 for PHP development dependencies;
  • Node.js 20.19 or newer (or 22.13 or newer) and npm 10.2.3 or newer for editor tooling.

The source tree includes a verified project-local Composer installer helper. The runtime package has no third-party PHP dependency in this alpha and retains a reviewed fallback PSR-4 autoloader.

Planned features

  • Select registered recipients by WordPress role, named list, or individual inclusion and exclusion.
  • Require verified email status for every registered WordPress recipient.
  • Let non-users subscribe through a block with double-opt-in verification.
  • Confirm notification intent in the block editor's publish workflow.
  • Handle immediate and scheduled posts without sending early.
  • Send an excerpt by default, with full-post, More block, and custom Email Cutoff block options.
  • Customize subject, HTML message, plain-text message, footer, and call to action.
  • Queue one message per recipient rather than sending synchronously during publication.
  • Provide visible unsubscribe, standardized one-click unsubscribe headers, global suppression, and verified resubscription.
  • Track submitted, failed, skipped, unique-click, and total-click statistics.
  • Provide privacy export, erasure, retention, and uninstall controls.

Scheduled posts

Scheduling a post must not create a campaign or send email. Notification intent is stored with the scheduled post. The campaign is created only when WordPress actually changes the post from future to publish.

If WP-Cron runs late, the notification is delayed until actual publication; it is never sent early merely because the editor selected a future date.

Email verification

Registered WordPress account verification remains a separate companion plugin:

ArgentWolf Email Verification

The notifier will use the companion plugin's canonical argentwolf_email_verification_... public API and will fail closed for registered-user recipients when no authoritative verification provider is available.

ArgentWolf Email Verification is now published on WordPress.org under the argentwolf-email-verification slug. The notifier declares that formal Requires Plugins dependency while retaining runtime health checks so missing, obsolete, or failing verification APIs still fail closed.

Standalone subscribers are maintained by the notifier and must complete a double-opt-in confirmation before they are eligible for post notifications.

Project documents

Architecture summary

A notification is an explicit campaign created at actual publication time. The campaign freezes its content, audience, and recipient records. Delivery occurs asynchronously through a queue. Verification, subscription preferences, deduplication, and global suppression are applied before a recipient can enter the send queue and are rechecked before delivery.

See ARCHITECTURE.md for the complete proposed design.

Canonical name

The public product name is ArgentWolf Post Notifier. The canonical plugin slug and text domain are argentwolf-post-notifier. Public code identifiers use the ArgentWolf\PostNotifier namespace or the argentwolf_post_notifier_ prefix.

Development

A conventional local checkout is:

mkdir -p ~/src
cd ~/src
git clone https://forgejo.argentwolf.org/alan/wp-plugin-argentwolf-post-notifier.git wp-argentwolf-post-notifier
cd ~/src/wp-argentwolf-post-notifier

The first development milestones are:

  1. establish the plugin skeleton and automated quality gates;
  2. publish a canonical verification contract from the companion plugin;
  3. implement versioned database schema;
  4. implement the verified standalone subscription block;
  5. implement the editor and actual-publication campaign lifecycle; and
  6. implement content rendering, queue delivery, unsubscribe, and statistics.

WordPress.org submission is a separate release gate after operational testing. The exact submitted ZIP must pass Plugin Check, package inspection, privacy and license review, and the full supported-version test matrix.

Forgejo CI uses qualified PHP 8.4 and 8.5 images by immutable digest. The integration matrix exercises the maintained WordPress 7.0 patch release and the current WordPress 7.1 patch release against the minimum and current qualified ArgentWolf Email Verification releases. After source and integration checks pass, CI builds one deterministic installable ZIP, installs that exact ZIP into a disposable WordPress site with the qualified verification companion, verifies the installed tree against the package bytes, and runs pinned Plugin Check 2.1.0 in static/new, runtime/new, and runtime/update modes. Plugin Check findings and notifier-specific WP_DEBUG_LOG findings are blocking.

See TODO.md for acceptance criteria and release planning.

License

ArgentWolf Post Notifier is licensed under the GNU General Public License, version 2 or later. See LICENSE.

Support the project

Development is supported through these project funding links:

Financial support does not change the GPL license or grant exclusive control over the open-source project.