Skip to content

feat(settings): Experimental Tools framework (NPPM-2692)#4591

Merged
adekbadek merged 9 commits into
trunkfrom
nppm-2692-experimental-tools-infrastructure
Apr 29, 2026
Merged

feat(settings): Experimental Tools framework (NPPM-2692)#4591
adekbadek merged 9 commits into
trunkfrom
nppm-2692-experimental-tools-infrastructure

Conversation

@adekbadek
Copy link
Copy Markdown
Member

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

@adekbadek adekbadek force-pushed the nppm-2692-experimental-tools-infrastructure branch from 3cc63bd to 2f6d120 Compare March 23, 2026 11:49
@adekbadek adekbadek requested a review from Copilot March 23, 2026 11:56
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_Tools PHP 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.

Comment thread includes/experimental-tools/class-experimental-tools.php
Comment thread includes/experimental-tools/class-experimental-tools.php
Comment thread includes/experimental-tools/class-experimental-tools.php
Comment thread src/wizards/newspack/views/settings/experimental-tools/configure-view.tsx Outdated
Comment thread src/wizards/newspack/views/settings/experimental-tools/configure-view.tsx Outdated
Comment thread src/wizards/newspack/views/settings/experimental-tools/enable-modal.tsx Outdated
Comment thread src/wizards/newspack/views/settings/experimental-tools/types.ts
Comment thread packages/components/src/card-feature/style.scss
@adekbadek adekbadek force-pushed the nppm-2692-experimental-tools-infrastructure branch 2 times, most recently from 64eeccc to 6dc7841 Compare March 23, 2026 13:17
@adekbadek adekbadek force-pushed the nppm-2692-experimental-tools-infrastructure branch from 6dc7841 to 72109e8 Compare March 23, 2026 13:52
@adekbadek adekbadek marked this pull request as ready for review March 23, 2026 21:14
@adekbadek adekbadek requested a review from a team as a code owner March 23, 2026 21:14
@adekbadek adekbadek added the [Status] Needs Review The issue or pull request needs to be reviewed label Mar 23, 2026
@github-actions github-actions Bot added [Status] Approved The pull request has been reviewed and is ready to merge and removed [Status] Needs Review The issue or pull request needs to be reviewed labels Apr 8, 2026
@adekbadek adekbadek merged commit 5a300eb into trunk Apr 29, 2026
9 checks passed
@adekbadek adekbadek deleted the nppm-2692-experimental-tools-infrastructure branch April 29, 2026 08:32
@github-actions
Copy link
Copy Markdown

Hey @adekbadek, good job getting this PR merged! 🎉

Now, the needs-changelog label has been added to it.

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! ❤️

@adekbadek adekbadek restored the nppm-2692-experimental-tools-infrastructure branch April 29, 2026 08:36
@adekbadek adekbadek deleted the nppm-2692-experimental-tools-infrastructure branch April 29, 2026 08:44
matticbot pushed a commit that referenced this pull request May 7, 2026
# [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))
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

🎉 This PR is included in version 6.40.0-alpha.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Status] Approved The pull request has been reviewed and is ready to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants