Skip to content

Retire the persistentgroups plugin - #35

Merged
mastacontrola merged 1 commit into
mainfrom
claude/retire-persistentgroups
Sep 1, 2026
Merged

Retire the persistentgroups plugin#35
mastacontrola merged 1 commit into
mainfrom
claude/retire-persistentgroups

Conversation

@mastacontrola

Copy link
Copy Markdown
Member

Core now does what this plugin existed to fake, and does it without the copying. A group holds a snapin grant of its own (fogproject #1604, #1611, #1612), so a host added to a group later is covered by it and a host removed stops being covered — the thing this plugin could never manage, because it acted once, at the moment of joining, and left rows behind.

Deleting this directory does not remove the plugin from a server

That is the whole reason the retirement is a schema step in fogproject rather than a file removal here. The work is a database TRIGGER, which outlives the files completely: sites that deleted this plugin years ago have had it firing ever since, copying 13 hosts columns — hostADPass among them — onto member hosts, below the PHP layer and outside the audit trail.

fogproject schema step 402 drops the trigger and removes the registration row. This commit only stops shipping the source that would re-create it.

It was already substantially broken on 1.6 data

The printer and module copies carry no ON DUPLICATE KEY UPDATE, so a collision raised a duplicate-key error inside an AFTER INSERT trigger and rolled back the groupMembers row that fired it. The host was not added to the group at all. Anyone who has seen group additions fail with a database error was seeing this.

Also removed

The README row, and a comment in tests/plugin-layout.test.php naming this plugin as the example of one with models but no pages. capone still carries the other half of that comment's point, so the check itself is unchanged.

tests/run-all.sh: 15 passed, 0 failed.

Background: ADR 0038 decisions 14 and 15.

🤖 Generated with Claude Code

Core now does what it existed to fake, and does it without the copying.
A group holds a snapin grant of its own (fogproject #1604, #1611, #1612),
so a host added to a group later is covered by it and a host removed
stops being covered -- which is the thing this plugin could never manage,
because it acted once, at the moment of joining, and left rows behind.

The plugin was already substantially non-functional on 1.6 data. Its
printer and module copies carry no ON DUPLICATE KEY UPDATE, so a
collision raised a duplicate-key error inside an AFTER INSERT trigger and
rolled back the groupMembers row that fired it: the host was not added to
the group at all.

DELETING THIS DIRECTORY DOES NOT REMOVE THE PLUGIN FROM A SERVER, and
that is the whole reason the retirement is a schema step rather than a
file removal. The work is a database TRIGGER, which outlives the files
completely -- sites that deleted this plugin years ago have had it firing
ever since, copying 13 hosts columns including hostADPass onto member
hosts, below the PHP layer and outside the audit trail. fogproject schema
step 402 drops the trigger and removes the registration row; this commit
only stops shipping the source that would re-create it.

Removed alongside the directory: the README row, and a comment in
tests/plugin-layout.test.php that named this plugin as the example of one
with models but no pages. capone still carries the other half of that
comment's point, so the check itself is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mastacontrola
mastacontrola merged commit 30affcb into main Sep 1, 2026
2 checks passed
@mastacontrola
mastacontrola deleted the claude/retire-persistentgroups branch September 1, 2026 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant