chore(privacy): use role references and drop verbatim maintainer quotes - #185
Conversation
Two hygiene rules restored across the tree. Both have been swept from this repository before and returned, so this change is paired with a local pre-commit gate rather than relying on discipline. 1. The maintainer's personal name is replaced with role references -- "the maintainer" -- in 21 source files and one spec. Docs and comments should name roles, not people. 2. specs/mail/spam-classification.md no longer quotes the maintainer's private working conversation verbatim. Five quotations become dated decision references: "(maintainer decision, 2026-08-02)". Rule 2 needs saying explicitly, because the repo's provenance discipline pulls the other way: every normative choice must carry its source, and anything unauthorized must be marked INFERRED. That duty is discharged by recording THAT a decision was made and when. It never required publishing the words. The decision ledger keeps its full force -- every DECIDED and INFERRED marking is unchanged. Commit history and merged pull-request bodies are deliberately untouched. Rewriting published history would cost every clone and fork more than the exposure is worth. No behaviour change: comments, spec prose, and one JSDoc string only. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reached
Next review available in: 14 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (22)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
An adversarial pass confirmed the no-behaviour-change claim (every changed line is a comment, JSDoc block, JSX comment, or markdown prose; all 21 TS/TSX files parse; delimiters balanced) and found the sweep incomplete in two places: The spec's own summary paragraph still reproduced two of the removed private phrasings verbatim, and asserted the decisions "are quoted in §7's ledger" -- which stopped being true when the ledger's quotations became dated decision references. Both phrasings are now paraphrased and the sentence says "recorded" rather than "quoted". A code comment read "flagged for his sign-off", carrying a personal pronoun through a change whose purpose was removing personal reference. Now "maintainer sign-off". Not fixed, raised separately: .github/CODEOWNERS names a personal GitHub handle. Changing it needs an org team that exists and holds the right access, and getting it wrong breaks required review. That is an ownership decision, not a hygiene edit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
🟢 SAFE TO MERGE
All 8 gates green, including Quality (typecheck, lint, test, coverage). No behaviour change — comments, spec prose, and one JSDoc string only, verified line by line. No new decisions: every choice here was made by the maintainer in session on 2026-08-02, including leaving
.github/CODEOWNERSas-is.CodeRabbit produced no review (rate limited, no walkthrough, no comments, no review object). Codex substituted, disclosed below: 3 findings — 2 real and fixed, 1 raised and decided.
What this changes
specs/mail/spam-classification.mdno longer quotes a private working conversation verbatim. Five quotations become dated decision references:(maintainer decision, 2026-08-02).The decision ledger keeps its full force. Every
DECIDEDandINFERREDmarking is unchanged — this only changes how the source is cited, not whether it is.Why rule 2 needs saying out loud
The repo's provenance discipline pulls the other way: every normative choice must carry its source, and anything unauthorized must be marked
INFERRED. That is a good rule and it stays.But it created steady pressure to paste the authorizing words into the repo — and that is not what it asked for. Recording that a decision was made, and when, discharges the duty completely. The verbatim source belongs outside the repository.
This has now been swept from this repo twice. PR #166 was itself titled "final public-repo hygiene" and its own provenance table contains the line "Names in docs become 'the maintainer'" — and the names came back. That is why this PR is paired with a mechanical gate rather than a resolution to be careful.
The gate — deliberately NOT in this repo
A pre-commit hook now blocks the name, contact details, verbatim quotations, and health or personal-circumstance language before a commit is created.
It is installed locally and is not committed here, on purpose: the patterns it matches are the disclosure. A version of this check was drafted into this repo's CI first; committing it would have published the exact strings it exists to remove, permanently, in a file whose purpose is removing them. Caught before it landed.
The hook was tested against six violation cases and two clean controls. The first two attempts silently passed everything —
\bis unsupported by the localgrep, which also rejected the diff-extraction pattern outright — so the matching now runs throughperl. Testing it is the only reason that is known.Deliberately out of scope
Commit messages (52) and merged PR bodies (32) that carry the name. Rewriting published history breaks every existing clone and fork; the exposure is a first name on a project the person owns. Not worth the cure.
Two merged PR bodies containing verbatim quotations (#180, #166) are being edited separately — bodies are mutable, so that costs nothing.
Decision provenance
(maintainer decision, 2026-08-02)) and that role references read as "the maintainer" rather than another formOne-way doors
None. Comment and prose edits, fully reversible. No public promise, no licensing term, no API surface.
🤖 Generated with Claude Code
Review adjudication
CodeRabbit did not review this PR — its check reported "Review rate limited" with no walkthrough, no inline comments, and no review object. Per the repo's review protocol that is not a review, so an adversarial Codex pass was run in its place and is disclosed here rather than left implied.
Codex: 3 findings — 2 real and fixed, 1 raised for a separate decision.
.github/CODEOWNERSnames a personal GitHub handleVerified clean by the same pass: no behaviour change (every changed line is a comment, JSDoc block, JSX comment, or markdown prose; all 21 TS/TSX files parse; comment delimiters balanced; token-identical with comments excluded); no
DECIDED/INFERREDdesignation altered; no grammar breakage from the substitution; nothing undisclosed in the diff.Finding 2 — needs an ownership decision, not a hygiene edit
.github/CODEOWNERSreads* @zaridan. Replacing it requires an org team that already exists and holds the right access; getting it wrong silently breaks required review on every PR. It is also weaker exposure than the rest — the account owns the repository, so it appears in commit metadata regardless.Decision: left as-is (maintainer instruction, 2026-08-02). Not deferred — decided.