=== ConfigOps – Settings History, Diff & Rollback ===
Contributors: pyrra
Tags: settings, history, rollback, audit log, developer tools
Requires at least: 7.0
Tested up to: 7.0
Requires PHP: 8.2
Stable tag: 0.2.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Track WordPress settings changes with precise diffs, secret redaction, and conflict-checked rollback.

== Description ==

ConfigOps is a local WordPress settings history and rollback plugin for administrators and developers who need reliable evidence before undoing configuration changes.

It shows what WordPress actually changed when a setting was saved.

Start a named capture, use the WordPress admin normally, then stop. ConfigOps groups writes by request, collapses consecutive writes by the same component to one option into the original-to-final decision, renders nested changes with plain-language labels, separates likely plugin housekeeping, and attributes the code path that caused the change where possible.

= Honest by default =

Probable credentials are removed before mutation history is stored. Undo checks that the current value still matches the capture before writing anything. An interrupted or incomplete capture loses whole-capture undo instead of pretending its evidence is safe.

Direct writes to custom plugin tables are recorded as value-free warnings. ConfigOps does not store raw SQL and does not claim it can reverse data it does not understand.

Site icons, site logos, and supported Yoast logo and social-image settings show the referenced attachment name, file type, dimensions, thumbnail, and missing state. Yoast publisher-policy, content-ignore, and LLMs.txt page IDs show bounded page identity instead of a bare database ID. ConfigOps never copies or deletes referenced media or content.

All evidence remains in the website database. ConfigOps does not send capture data to pyrra or another external service. Suggested disclosure text is added to WordPress's privacy-policy guide.

= Tested component contracts =

The first release includes pinned adapters for:

* WordPress Core 7.0
* WP Mail SMTP Free 4.9.0
* Yoast SEO Free 28.2

The Plugin support screen states exactly which WordPress and plugin capabilities are supported, limited, or not available. An untested component version keeps its capture evidence but disables automatic undo.

= Current scope =

Version 0.2 is a local technical preview for capture, review, and conflict-checked restore. It is not a staging plugin, backup, content migration, database synchronization, fleet manager, or generic activity log.

== Installation ==

1. Upload the ConfigOps ZIP through Plugins > Add Plugin > Upload Plugin.
2. Activate ConfigOps.
3. Open ConfigOps, name a capture, and start recording.
4. Change one WordPress or plugin setting as usual.
5. Stop the capture and review the result before using any undo action.

== Frequently Asked Questions ==

= Does ConfigOps capture custom plugin tables? =

Not generically. ConfigOps records a value-free warning when it observes a direct database write, but understanding or reversing a custom table requires an explicit adapter.

= Are secrets stored in the mutation history? =

Probable secret fields and options are replaced before persistence. Supported adapters may undo neighboring non-secret fields while preserving the current credential. ConfigOps never reconstructs a redacted secret.

= Is rollback guaranteed? =

No. ConfigOps restores supported Options API values after a conflict check. Side effects in files, caches, remote services, or custom tables may remain. The interface states when undo is limited or unavailable.

If earlier referenced media or content has since been deleted or moved to the trash, ConfigOps refuses to restore its local ID.

= What happens when capture storage fails? =

The host settings request is allowed to finish. ConfigOps marks the recording incomplete through a value-free emergency marker and disables whole-capture undo after storage recovers.

= How long is local history kept? =

While ConfigOps is active, completed and interrupted captures are kept for 30 days by default. Cleanup is bounded and never selects an active capture. Developers may change the window with the `configops_retention_days` filter. Uninstalling ConfigOps removes its capture history, installation options, scheduled cleanup, and capabilities.

= How do I report a security issue? =

Email felix@pyrra.net. Do not post credentials, configuration values, database exports, or customer data in a public support thread.

== Screenshots ==

1. A focused WP Mail SMTP review shows precise before-and-after evidence while removing the changed SMTP password before storage.
2. A Yoast SEO capture reduces a noisy settings save to the single XML sitemaps decision and its safe undo action.
3. WordPress Core, WP Mail SMTP, and Yoast SEO support are published as explicit capability contracts with tested versions and known limits.

== Changelog ==

= 0.2.0 =

* Supports PHP 8.2 through 8.5 with full minimum-runtime and endpoint browser contracts.
* Enforces 70% production and 75% trust-boundary PHP line coverage in CI.
* Adds hostile-input, warning/deprecation, dependency-advisory, and runtime-lifecycle gates.
* Builds a byte-reproducible release archive before WordPress Plugin Check.
* Publishes a complete operator, safety, support, and development documentation site through GitHub Pages.

= 0.1.0 =

* First technical preview by pyrra.
* Explicit local captures with request grouping and source attribution.
* Local intent correlation matches touched admin-field names and labels to saved option paths without reading field values or expanding undo permissions.
* Same-request option-write chains collapse to their original and final state; complete same-owner reverts disappear from review.
* Typed nested diffs, conservative noise classification, and secret redaction before persistence.
* A WordPress Core 7.0 settings contract for General, Writing, Reading, Discussion, Media, and Permalink settings.
* Conflict-checked field and session undo with value-free audit records and compensating recovery.
* Exact deep-field contracts for every bundled WP Mail SMTP Free 4.9.0 mailer and the Yoast SEO Free 28.2 feature, crawl, schema, search, social, and LLMs.txt families.
* Media and content identity review for WordPress site icons/logos and supported Yoast image/page fields, including missing-target undo protection.
* Fail-closed capture finalization, schema recovery, bounded 30-day retention, and integrity warnings.
* Performance-budgeted React review interface with responsive and keyboard-tested states.
