feat(settings): Experimental Tools framework (NPPM-2692)#4591
Conversation
3cc63bd to
2f6d120
Compare
There was a problem hiding this comment.
Pull request overview
Introduces a new “Experimental Tools” framework to Newspack Settings: external plugins can register tools via a filter, Newspack persists per-tool state in an option, exposes REST endpoints for toggling/saving settings, and adds a new Settings tab with a CardFeature-based UI and configuration view.
Changes:
- Added
Experimental_ToolsPHP manager (filter registration, option storage, REST API, usage tracking) and wired it into plugin includes + Newspack Settings tab data. - Added a new Settings UI section (
experimental-tools) with enable modal + per-tool configure form, plus supporting TS types and styles. - Updated CardFeature styling to better support equal-height cards / action row placement; added unit tests for the new PHP framework.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
includes/experimental-tools/class-experimental-tools.php |
Core framework: registration, persistence, REST routes, accessors, usage tracking. |
includes/class-newspack.php |
Loads the new Experimental Tools class. |
includes/wizards/newspack/class-newspack-settings.php |
Adds “Experimental tools” settings tab when tools are registered. |
src/wizards/newspack/views/settings/sections.tsx |
Lazily loads the new experimental-tools settings section. |
src/wizards/newspack/views/settings/experimental-tools/index.tsx |
Main UI list + configure route switching and REST interactions. |
src/wizards/newspack/views/settings/experimental-tools/configure-view.tsx |
Per-tool configuration form and client-side validation. |
src/wizards/newspack/views/settings/experimental-tools/enable-modal.tsx |
Enable confirmation modal for tools. |
src/wizards/newspack/views/settings/experimental-tools/types.ts |
Type definitions for tool + field schema. |
src/wizards/newspack/views/settings/experimental-tools/style.scss |
Styles for the configure view / display fields. |
packages/components/src/card-feature/style.scss |
Layout adjustments for CardFeature. |
tests/unit-tests/experimental-tools.php |
Unit tests for registration, toggling, metadata, field saving, and usage tracking. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
64eeccc to
6dc7841
Compare
6dc7841 to
72109e8
Compare
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Hey @adekbadek, good job getting this PR merged! 🎉 Now, the Please check if this PR needs to be included in the "Upcoming Changes" and "Release Notes" doc. If it doesn't, simply remove the label. If it does, please add an entry to our shared document, with screenshots and testing instructions if applicable, then remove the label. Thank you! ❤️ |
# [6.40.0-alpha.1](v6.39.1...v6.40.0-alpha.1) (2026-05-07) ### Bug Fixes * **access-control:** allow `0` member limit values to be shown ([#4670](#4670)) ([b7ea1e3](b7ea1e3)) * **access-control:** allow access rules with `supports_anonymous` to evaluate anonymous readers ([#4695](#4695)) ([3219d63](3219d63)) * **access-control:** bump content rule suggestion limit to 100 ([#4669](#4669)) ([64629eb](64629eb)) * **access-control:** ignore content rules with empty value ([#4675](#4675)) ([c01e97d](c01e97d)) * add `use` statements for clarity ([b0074c0](b0074c0)) * add 30s timeout to v2 invisible token acquisition to prevent hang ([8fd1a17](8fd1a17)) * add isolated flag to v2 invisible widget to prevent interference ([9cfcc30](9cfcc30)) * address potential race condition on multiple registrations with same email ([4fbb990](4fbb990)) * **advertising:** toggle spacing under category autocomplete ([1c65593](1c65593)) * **block-theme:** ensure Overlay Menu block panel opens in editor after template part switch ([#4642](#4642)) ([e45cfd0](e45cfd0)) * **campaigns:** remove wrapper div around add campaign modal input ([#4705](#4705)) ([e04d4af](e04d4af)) * centralize, normalize definition of `$referer` ([e38a94f](e38a94f)) * condition config output on RAS ([22c87af](22c87af)) * condition reCAPTCHA v3 actions on their `ready()` ([a70d5ff](a70d5ff)) * **content-gate:** pass redirectToLayout explicitly on Save ([#4702](#4702)) ([a95cd4d](a95cd4d)) * ensure idempotency by making sure callers get current reader data for logged-in readers ([be59918](be59918)) * gracefully reject calls if essential config is missing ([dd4c46b](dd4c46b)) * **indesign:** exclude rich media blocks from export output ([#4614](#4614)) ([6e45232](6e45232)) * make endpoint available only when RAS is enabled, per Copilot ([18de923](18de923)) * **memberships:** prevent duplicate teams on stripped-meta renewals ([#4661](#4661)) ([84f6c99](84f6c99)) * merge into existing `reader` now that we are out of POC ([3200cc0](3200cc0)) * move grecaptcha.execute inside try block to prevent Promise leak ([f224df8](f224df8)) * move reCAPTCHA behind rate limiting to protect metered service from floods ([0ec69a2](0ec69a2)) * **recaptcha:** skip script registration on TEC Community Events pages ([#4666](#4666)) ([d9a57c5](d9a57c5)) * reject Promise and provide helpful error if reCAPTCHA not happy ([099a109](099a109)) * send nonce, if available, with registration request ([ab57d81](ab57d81)) * textarea support ([8676e2d](8676e2d)) * use returned status rather than hardcoded value ([ea9af30](ea9af30)) * use server-side email, not submitted email, for logged-in users ([56e699f](56e699f)) ### Features * **access-control:** add Specific posts content rule ([#4674](#4674)) ([6735309](6735309)) * **access-control:** auto-signup on renewal only for already subscribed lists ([#4621](#4621)) ([23934c6](23934c6)) * **access-control:** human-readable group subscription names ([#4667](#4667)) ([a817304](a817304)) * **access-control:** tweaks to Access Control UI components ([#4659](#4659)) ([3c08943](3c08943)) * add block theme support to lite site ([#4628](#4628)) ([71632b9](71632b9)) * add overridable registration key methods to Integration base class ([2b4d04f](2b4d04f)) * add reCAPTCHA v2 invisible support to register() ([60b0e77](60b0e77)) * **block-theme:** add size options to the Overlay Menu ([#4652](#4652)) ([3b11b75](3b11b75)) * **block-theme:** move co-authors RSS feed code to the Newspack Plugin ([#4629](#4629)) ([50a160c](50a160c)) * **co-authors:** support CAP core entity store alongside legacy store ([#4673](#4673)) ([b80c49a](b80c49a)) * **components:** addToolbarBackButton util in newspack-components ([#4619](#4619)) ([ec36aa3](ec36aa3)) * **content-gate:** expose institutional IP allowlist endpoint ([#4685](#4685)) ([c6a054a](c6a054a)) * **data-events:** woo transactional events ([#4687](#4687)) ([544d718](544d718)) * delegate key generation and validation to Integration instances ([6aba746](6aba746)) * initial reader registration API rollup from working branch ([0250b2a](0250b2a)) * **integrations:** add activity logs view ([#4671](#4671)) ([fb98062](fb98062)) * **integrations:** add content gate metadata ([#4605](#4605)) ([dcd2a09](dcd2a09)) * **integrations:** contact cron for push and pull ([#4608](#4608)) ([29e6668](29e6668)) * **integrations:** redesign configure view ([#4668](#4668)) ([472dd06](472dd06)) * **integrations:** redesign dashboard with CardFeature grid ([#4665](#4665)) ([d20aae8](d20aae8)) * localize reCAPTCHA site key and version for both v2 and v3 ([56ba6ea](56ba6ea)) * more options for registration ([4c23648](4c23648)) * **newspack-ui:** refactor newsletter signup form with Newspack UI utilities ([#4491](#4491)) ([1859473](1859473)) * **reader-activation:** configure ESP incoming fields from schema ([#4676](#4676)) ([8bc84cc](8bc84cc)) * **reader-activation:** frontend registration API for integrations ([2d7a1bc](2d7a1bc)) * **settings:** Experimental Tools framework (NPPM-2692) ([#4591](#4591)) ([5a300eb](5a300eb)) * trigger a hook and invoke an integration callback when logged in user registers ([167383a](167383a))
|
🎉 This PR is included in version 6.40.0-alpha.1 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Summary
Adds the generic Experimental Tools framework to newspack-plugin: a filter-based tool registration system, REST API, and a new Settings tab with CardFeature-based UI.
Full details, video walkthroughs, and test plan in the companion PR:
https://github.com/Automattic/newspack-manager/pull/529
🤖 Generated with Claude Code