Repository navigation
release: SiteAgent 2.22.0 — the install ledger (P6.3 phase 2) #140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
827ac3b
a42ea33
11843d4
ba46c7d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,7 +4,7 @@ Tags: ai, automation, maintenance, updates, wordpress management | |
| Requires at least: 6.2 | ||
| Tested up to: 7.1 | ||
| Requires PHP: 7.4 | ||
| Stable tag: 2.21.0 | ||
| Stable tag: 2.22.0 | ||
| License: GPLv2 or later | ||
| License URI: https://www.gnu.org/licenses/gpl-2.0.html | ||
|
|
||
|
|
@@ -253,6 +253,10 @@ Yes. SiteAgent is open source under the GPLv2 or later license. The source code | |
|
|
||
| == Changelog == | ||
|
|
||
| = 2.22.0 = | ||
| * New: an install ledger. Every plugin and theme install or update is recorded with how it arrived (wp-admin, REST, WP-CLI, cron, a WordPress auto-update, or SiteAgent itself), which user and application password, and where the package came from, so Aura can flag packages an AI agent installed. It only observes; it never blocks an install. Nothing to configure. | ||
| * Privacy: each record keeps the user ID, the application password's name (never the password) and the REST route. While the plugin is active, records older than 90 days (or beyond the latest 200 installs) are deleted; a deactivated plugin cannot delete anything, so they stay until its first cleanup after reactivation (the daily clean-up, an audit or the next install) or until it is uninstalled. Records are not autoloaded and are deleted when the plugin is uninstalled. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The release now explicitly stores Useful? React with 👍 / 👎. |
||
|
|
||
| = 2.21.0 = | ||
| * The Aura approval queue now shows whether an operator rule would block or warn about an Elementor design change made through the elementor-mcp plugin (1.38.0 or later), before anyone approves it. Nothing runs when the queue asks. No new settings. | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| <?php | ||
| /** | ||
| * The suggested privacy-policy text names the install ledger's personal data | ||
| * (2.22.0, Aura spec 2026-09-21 §4.2) — never "no personal data". | ||
| * | ||
| * @package Aura_Worker\Tests | ||
| */ | ||
|
|
||
| use PHPUnit\Framework\TestCase; | ||
|
|
||
| if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) { | ||
| function wp_add_privacy_policy_content( $plugin_name, $policy_text ) { | ||
| $GLOBALS['_sa_privacy_policy'][ $plugin_name ] = $policy_text; | ||
| } | ||
| } | ||
| if ( ! function_exists( 'wpautop' ) ) { | ||
| function wpautop( $text ) { | ||
| return $text; | ||
| } | ||
| } | ||
| if ( ! function_exists( 'wp_kses_post' ) ) { | ||
| function wp_kses_post( $text ) { | ||
| return $text; | ||
| } | ||
| } | ||
|
|
||
| final class PrivacyPolicyContentTest extends TestCase { | ||
|
|
||
| public function test_the_policy_text_discloses_the_install_ledger(): void { | ||
| unset( $GLOBALS['_sa_privacy_policy'] ); | ||
| ( new Aura_Worker() )->add_privacy_policy_content(); | ||
| $text = (string) ( $GLOBALS['_sa_privacy_policy']['SiteAgent'] ?? '' ); | ||
| $this->assertStringNotContainsString( 'No personal user data', $text ); | ||
| foreach ( array( 'ID of the user', 'application password', 'REST route', '90 days', 'uninstalled' ) as $needle ) { | ||
| $this->assertStringContainsString( $needle, $text ); | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The advertised source and
siteagenttransport classification cannot work with these hooks:WP_Upgrader::run()invokesdownload_package()(and thereforeupgrader_pre_download) beforeinstall_package()appliesupgrader_package_options. Consequently, the token added byon_package_options()is never present whenon_pre_download()checks it, no frame is created, andon_install_result()always falls back tocontext(false)plussource: unknown(class-aura-worker-install-ledger.php:527-529,574-580,641-665). This makes SiteAgent-driven installs indistinguishable from their ambient request transport and discards the package source for every normal upgrade, undermining the grading this release claims to enable; correlate the pre-download observation without relying on a token added later in the upgrader flow.Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not the order in core. WordPress 7.1.2 wp-admin/includes/class-wp-upgrader.php, WP_Upgrader::run(): line 818
$options = apply_filters( 'upgrader_package_options', $options );→ line 849$download = $this->download_package( $options['package'], false, $options['hook_extra'] );(which appliesupgrader_pre_downloadat line 322 with that same $hook_extra) → line 898 install_package → line 917apply_filters( 'upgrader_install_package_result', $result, $options['hook_extra'] ). The token added at 818 is therefore present at pre-download and at the result, which is what the ledger relies on (spec §4.1, read from core). The staging field check before promotion exercises this on a real install.