feat(standard): author identity is the GitHub handle - defaults, stated convention, self-check enforcement - #29
Merged
Merged
Conversation
…andle
The step-5 recipe resolved user.name as `.name // .login` -- the real
profile name on any account that has one -- under a heading that promised
anonymity; only the email was anonymised. Prefer `.login` for both fields,
make an explicit real identity the recorded opt-in direction, and flip the
`{{author}}` interview default from a personal name to the handle.
Refs #26
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The handle-over-real-name expectation becomes a stated convention: a new
"Author identity" section in the-standard.md (with the opt-in path -- a
real name is a per-repo declared variance, recorded in an ADR and a
START-HERE row), the commit-identity section covers both fields, and the
pre-commit checklist extends the contact-info item to names.
Reintroduction is now caught, not review-dependent: repokit-check.ps1
gains check 6 -- repo-local git identity and commit history (bounded by
the adoption marker) must be handle + noreply unless the variance row is
declared -- with smoke coverage for the pass/fail/variance cases. The
optional bracketed-grep tree guard is documented with its trade-off
(the pattern spells the name) rather than stamped into scaffolds.
Also stamps the licence copyright line from {{year}}/{{author}} instead
of a hardcoded handle, adds the identity ground rule to the scaffolded
AGENTS.md, and allowlists GitHub's own web-flow service address in the
private-contact scan.
Refs #25
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Updates RepoKit’s standard and scaffolding defaults so author identity is the GitHub handle (not a real/personal name) across commit identity, templates, and docs; and adds a self-check guard to catch non-compliant commit identities unless an explicit variance is declared.
Changes:
- Standardizes “handle + noreply” as the default author identity and documents the opt-in variance path (ADR + START-HERE row).
- Adds
repokit-check.ps1check 6 to validate repo-local git identity (when set) and commit history since the adoption marker. - Updates
/new-repoguidance and templates ({{author}},LICENSE.tmpl) plus validation scripts/smoke tests to enforce/cover the new behavior.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/smoke_test_repokit_check.ps1 | Adds git-backed fixtures to validate the new author-identity self-check behavior. |
| scripts/check_no_private_contact.py | Allows GitHub’s noreply@github.com service identity through private-contact scanning. |
| plugins/repokit/skills/repo-standard/standard/the-standard.md | Documents the “author identity” convention and the optional tree-guard approach/trade-offs. |
| plugins/repokit/skills/repo-standard/standard/pre-commit-checklist.md | Expands the checklist tripwire to include real names (not just emails). |
| plugins/repokit/skills/repo-standard/standard/commit-conventions.md | Aligns commit identity guidance to “handle + noreply” and references the new guard. |
| plugins/repokit/skills/new-repo/templates/public/LICENSE.tmpl | Stamps copyright with {{year}}/{{author}} instead of a hardcoded value. |
| plugins/repokit/skills/new-repo/templates/core/scripts/repokit-check.ps1 | Implements check 6 to validate commit identity (repo-local config + bounded history). |
| plugins/repokit/skills/new-repo/templates/core/AGENTS.md.tmpl | States the handle-as-author convention in the scaffolded agent guidance. |
| plugins/repokit/skills/new-repo/SKILL.md | Updates /new-repo interview defaults and git identity recipe to prefer .login. |
| plugins/repokit/skills/new-repo/references/placeholders.md | Updates {{author}} placeholder definition to match the handle-first convention. |
| docs/CHECKPOINT.md | Updates resume-state content for the current work batch/status. |
| docs/adr/0009-author-identity-handle-not-real-name.md | Records the decision, rationale, and guard design trade-offs. |
| CHANGELOG.md | Notes the added convention + guard and the fixed /new-repo identity defaults. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+128
to
+134
| function Test-AnonymousIdentity([string]$Name, [string]$Email) { | ||
| if ($Email -eq 'noreply@github.com') { return $true } # GitHub's own web-flow identity | ||
| if ($Email -match '^(\d+\+)?(?<login>[^@]+)@users\.noreply\.github\.com$') { | ||
| return ($Name -eq $Matches['login']) # the handle, nothing else | ||
| } | ||
| return $false | ||
| } |
Owner
Author
| # --- Author-identity cases (refs #25/#26) — these fixtures are real git repos. --------------- | ||
| function New-GitFixture([string]$UserName, [string]$UserEmail) { | ||
| $d = New-Fixture | ||
| git -C $d init -q -b main |
Owner
Author
Comment on lines
+7
to
+13
| - Status: IN PROGRESS | ||
| - In progress: two branches ready for local review — `fix/author-identity` (#25 + #26, | ||
| ADR-0009: handle-over-real-name defaults, repokit-check identity check) and | ||
| `fix/session-end-branch-check` (#28: content-based branch-landed check); owner pushes and | ||
| opens the PRs (`Refs #NN`, no closing keywords) | ||
| - Next step: review both branches, push, open two PRs, merge, verify, close #25/#26/#28; | ||
| `[Unreleased]` then holds a shippable standards batch — cut 0.6.0 |
Owner
Author
There was a problem hiding this comment.
…ollow-up) Copilot review on PR #29: noreply@github.com passed with any name, so a real name paired with the web-flow email slipped through -- now only "GitHub <noreply@github.com>" passes, with smoke cases in both directions. Also mirrors the documented git < 2.28 init fallback in the smoke fixture and refreshes the checkpoint to post-push state. Refs #25 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PBNZ
added a commit
that referenced
this pull request
Aug 12, 2026
…rges (#30) * fix(standard): branch-landed check is content-based, not ancestry-based The session-end checklist's first item relied on `git branch -a --no-merged`, an ancestry test: on rebase- or squash-merging repos every landed branch is reported unmerged forever, `git branch -d` refuses it by the same test, and the only way to clear the box was the reflexive `git branch -D` habit the checklist should be training away. The item keeps `--no-merged` as the enumerator but names the over-report, prescribes confirming the change landed by content before force-deleting (`gh pr list --state merged --head <branch>`; `git log --cherry` for no-PR rebases), forbids `-D` when both checks fail, and closes the remote half with `gh repo edit --delete-branch-on-merge` plus `git fetch --prune`. The sentence quoted verbatim by agent-collaboration.md is unchanged. Refs #28 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: refresh checkpoint to post-push state (review follow-up) Copilot review on PR #30: the checkpoint described pre-PR actions that are already done. Now states the open PRs and the remaining owner steps. Identical content lands via PR #29 so the second merge stays clean. Refs #28 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This was referenced Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Scaffolded repos could end up carrying a real personal name — the
/new-repocommit-identity recipe preferred the profile name (.name // .login) under a heading that promised anonymity, the{{author}}default was a personal name, and nothing caught a name reintroduced later. This PR flips every identity default to the GitHub handle, states the convention in the standard (a real name is a per-repo opt-in recorded as an ADR + START-HERE variance row), and addsrepokit-check.ps1check 6 so reintroduction fails the self-check instead of relying on review. The optional tree-guard grep from the field report is documented with its trade-off rather than stamped into scaffolds (ADR-0009 records why).Refs #25, Refs #26
Checklist
Refs #NN(no auto-close keywords), if the repo tracks issues.feat: …,fix: …,docs: …).CHANGELOG.mdupdated under## [Unreleased]if user-visible.python scripts/*.py; see.github/workflows/validate.yml).docs/adr/for any notable decision.🤖 Generated with Claude Code