Skip to content

Release: v0.12.0 - #263

Open
github-actions[bot] wants to merge 24 commits into
mainfrom
develop
Open

github-actions[bot] wants to merge 24 commits into
mainfrom
develop

Conversation

@github-actions

Copy link
Copy Markdown

Improvements

Technical

codeforphilly-bot and others added 24 commits November 11, 2026 19:33
An AI agent can hold a narrow grant to read the moderation roster and
cast spam or not-spam votes. Its votes are labeled agent-<slug>, stage
for three days, and any staff vote overrules them. Proposal for
review; nothing is implemented.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
The operator's policy: purge at once when an account posts spam, vote
when a signup only looks like spam. Adds a separate purge scope with
API-enforced preconditions, a public spam-purges record that blocks the
same GitHub account from signing straight back in, and a fix so a purged
account's votes no longer attach to a new account under the same slug.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
…scrub rule

Three corrections found while building: the PrivateProfile schema requires an email, the purge log needs a resolved actor beside the stored string, and the scrubbed snapshot must pseudonymize the new slug fields.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
A vote dated before the person's createdAt was cast on an earlier account with the same slug. It no longer counts in the roster, the reversal rule, the sweep or prune-spam.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Schemas, evaluator kinds, sheet configs and contracts for agent grants and the spam purge log, plus the private store for token hashes.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
An agent authenticates with a cfpa_ token checked against a stored hash and is anonymous outside its scopes. Administrators create, mint and revoke grants.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Agent spam votes stage a member for the three-day sweep while the grant is active. Human votes are final. Staff can withdraw all of an agent's votes.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
POST /api/admin/members/:slug/purge with reason, flags, evidence and dryRun. Every precondition is enforced in the API, one commit per purge.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
A purged spammer's GitHub id is refused at sign-up and account linking until staff unblock it. The sweep and staff purges write the same record.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
…gn-in

Roster badges and filter, the Agents panel with grants and the purge log, the week-long banner, and the messages a blocked sign-in sees.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
How an administrator creates an agent and mints a grant, and how to restore a member purged by mistake.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Votes after a purge of the slug, retired slugs, atomic checks, claims, revoke with withdraw, URL and evidence rules. From an independent review of the implementation.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Votes at or before a purge of the slug do not count for a different person. Renames onto a slug with moderation history, and renames of agent accounts, are refused.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
…ore lock

State was applied after the write lock was released, so concurrent purges could pass the daily cap or race a staff vote.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
A GitHub user with a matching login was offered the agent account as a claim candidate.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
An agent created without a grant was an ordinary user. Revoking a compromised token can now withdraw its staged votes in the same commit.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Bare and defanged domains are refused in agent reasons and vote reasoning. A malformed evidence identifier is a 422, not a 500.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Concurrent lastUsedAt writes shared one temp path and could fail or drop a new hash.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Matches the adoption proposed on the data repo's empty branch (codeforphilly-data PR 21). The drift check passes once that merges.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
The revert stops on a conflict after an unblock, the clone must be pulled first, the purge commit is found by its Purge-Id, and Not spam must land before the next sweep.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
…ed purges

Two assertions the plan's validation list named but no test made.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
Sixteen of seventeen validation boxes verified. The contract box closes when the release adopts the two sheets on the published branch.

Co-Authored-By: Claude Fable 5.2 <[email protected]>
Claude-Session: https://claude.ai/code/session_01S8dthiZS2vwh674eh2DDQs
feat(moderation): agent accounts that vote on and purge spam
@github-actions

Copy link
Copy Markdown
Author

Changelog

- feat(moderation): agent accounts that vote on and purge spam [#262] @codeforphilly-bot

@codeforphilly-bot codeforphilly-bot changed the title Release: v0.11.1 Release: v0.12.0 Nov 12, 2026

This branch has not been deployed

No deployments
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.

2 participants