Skip to content

Drop address.aliases from the contract (half 2 of 2) — HOLD until .github-private#1289 merges#769

Merged
don-petry merged 3 commits into
mainfrom
fix/drop-aliases-schema
Jul 17, 2026
Merged

Drop address.aliases from the contract (half 2 of 2) — HOLD until .github-private#1289 merges#769
don-petry merged 3 commits into
mainfrom
fix/drop-aliases-schema

Conversation

@don-petry

@don-petry don-petry commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Second half of the ordered cross-repo pair. petry-projects/.github-private#1289 removed every use of the field; this removes the field itself.

⚠️ MERGE ORDER

.github-private#1289 MUST land before this. The schema is additionalProperties: false, so dropping aliases while qa-lead's manifest still carries aliases: [] fails validate-personas on main fleet-wide.

Verified the rejection is real: a manifest carrying aliases now yields "Additional properties are not allowed ('aliases' was unexpected)". That's the desired end state — and exactly why the order matters.

Why aliases are gone (#755 finding 1)

They existed so a renamed role kept routing — qa-lead listing petry-projects/murat so old comments still reached it. Two reasons it goes, one structural and one measured:

1. Index-free routing could never honour it. The router resolves @petry-projects/muratpersonas/murat/persona.yml → 404 after the rename. The alias is declared inside the renamed persona's own manifest, which the router never opens because it doesn't know to look there. The pm_persona_aliases attempt in #754 was unreachable for exactly this reason.

2. There is nothing live left to route. GitHub stops rendering a renamed team's old handle as a mention at all. I probed it — created a team, rendered its mention, renamed it, re-rendered the old handle:

Renders as
before rename <a class="team-mention" …>@petry-projects/probe</a>
after rename <p>@petry-projects/probe please review</p>

The old handle becomes plain text. So it isn't a silently-broken mention that looks live — the reader sees grey text and knows instantly it didn't resolve, and the fix is local: mention the new handle. Aliases would only route text GitHub itself no longer treats as a mention.

Rule 4 becomes a theorem; rule 5 becomes a Renames section

Rule 4"Handles and aliases MUST be unique across all personas""Handles are unique BY CONSTRUCTION": the pattern pins the org, slug == id, id == the persona directory name, and directory names are unique. Two personas cannot claim the same handle. #1289 removed the corresponding check_handles_unique for the same reason — it could never fire.

Rule 5"a rename keeps the old handle as an alias" → a §4.1 Renames section documenting exactly what to change on a rename, and stating plainly that old mentions stop resolving visibly, which is the correct signal rather than a regression.

Verification

  • persona.schema.json is a valid Draft 2020-12 schema; diff is +2/-10
  • Edited as text, not re-serialized — a JSON round-trip reformats every inline array and rewrote 264 untouched lines (the same trap as canary-rings.json)
  • qa-lead's post-#1289 shape (handle only) PASSES; a manifest carrying aliases FAILS
  • TEMPLATE/persona.yml validates against the updated schema
  • markdownlint-cli2 clean
  • Zero aliases references remain outside the deliberate explanatory notes

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Clarified persona handle renaming and routing conventions.
    • Documented that renamed personas do not retain legacy handles as aliases.
    • Added guidance for updating persona metadata and corresponding team slugs.
  • Standards

    • Removed support for alternate persona handles.
    • Updated the persona template and validation rules to require only a primary handle.

Second half of the ordered cross-repo pair. petry-projects/.github-private#1289
removed every USE of the field first; this removes the field itself.

MERGE ORDER: #1289 MUST land before this. The schema is
additionalProperties:false, so dropping `aliases` while qa-lead's manifest still
carries `aliases: []` fails validate-personas on main FLEET-WIDE. Verified the
rejection is real: a manifest with `aliases` now yields "Additional properties
are not allowed ('aliases' was unexpected)".

Why aliases are gone (see .github#755 finding 1)

They existed so a RENAMED role kept routing — qa-lead listing
`petry-projects/murat` so old comments still reached it. Two reasons it goes:

1. Structural: index-free routing could never honour it. The router resolves
   '@petry-projects/murat' to personas/murat/persona.yml — a 404 after the
   rename. The alias is declared INSIDE the renamed persona's own manifest,
   which the router never opens, because it does not know to look there.
   Chicken-and-egg; the pm_persona_aliases attempt in #754 was unreachable for
   exactly this reason.

2. Measured: there is nothing live left to route. GitHub stops rendering a
   renamed team's old handle as a mention at all. Probed it directly — created
   a team, rendered its mention, renamed it, re-rendered the OLD handle:

     before rename:  <a class="team-mention" …>@petry-projects/probe</a>
     after rename:   <p>@petry-projects/probe please review</p>

   The old handle becomes PLAIN TEXT. So it is not a silently-broken mention
   that looks live — the reader sees grey text and knows instantly it did not
   resolve, and the fix is local: mention the new handle. Aliases would only
   route text GitHub itself no longer treats as a mention. Not worth a derived
   index, an extra fetch on every 404, and a contract the router cannot honour.

Rule 4 becomes a theorem, not a check

"Handles and aliases MUST be unique across all personas" is replaced by
"Handles are unique BY CONSTRUCTION": the pattern pins the org, slug == id,
id == the persona directory name, and directory names are unique — so two
personas cannot claim the same handle. #1289 removed the corresponding
check_handles_unique for the same reason: it could never fire.

Rule 5 ("a rename keeps the old handle as an alias") is replaced by a §4.1
"Renames" section documenting what to change on a rename and stating plainly
that old mentions stop resolving VISIBLY — which is the correct signal, not a
regression.

Changes
- standards/personas/persona.schema.json — drop address.aliases (edited as TEXT,
  not re-serialized: a json round-trip reformats every inline array and rewrote
  264 untouched lines. Diff is +2/-10.)
- standards/persona-standards.md — §4.1 rules 4-5, the example, and the new
  Renames section
- standards/personas/TEMPLATE/persona.yml — drop the aliases scaffold line

Verification
- persona.schema.json is a valid Draft 2020-12 schema; diff is +2/-10.
- Conditional behaviour verified: qa-lead's post-#1289 shape (handle only)
  PASSES; a manifest carrying `aliases` FAILS — which is exactly why #1289 goes
  first.
- TEMPLATE/persona.yml validates against the updated schema.
- markdownlint-cli2: clean.
- Zero `aliases` references remain outside the deliberate explanatory notes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@don-petry
don-petry requested a review from a team as a code owner July 17, 2026 12:55
Copilot AI review requested due to automatic review settings July 17, 2026 12:55
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@donpetry-bot, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 26 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 0f7037b5-4e68-48c8-b649-f592c8f3a392

📥 Commits

Reviewing files that changed from the base of the PR and between 2e2cf4b and b593da5.

📒 Files selected for processing (2)
  • standards/persona-standards.md
  • standards/personas/persona.schema.json
📝 Walkthrough

Walkthrough

The persona addressing contract now supports only a primary handle. The schema and template remove address.aliases, while the standards document handle uniqueness and the required rename procedure.

Changes

Persona addressing contract

Layer / File(s) Summary
Remove aliases from persona contracts
standards/personas/persona.schema.json, standards/personas/TEMPLATE/persona.yml
The schema and template remove address.aliases and document handle-only addressing.
Document handle uniqueness and renames
standards/persona-standards.md
Addressing guidance describes fleet-wide handle uniqueness, non-routable old handles, and the metadata and team-slug updates required for renames.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • petry-projects/.github#752: Modified the same persona addressing contract by introducing and validating address.aliases, which this PR removes.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly states the main change: removing address.aliases from the contract.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/drop-aliases-schema

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — waiting on PR blockers (intent: review-changes)

PR: #769
No changes were committed, but the PR still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews). The retry cron will re-attempt automatically. Next attempt after: 2026-07-17T13:26:35Z

@don-petry

Copy link
Copy Markdown
Contributor Author

Note

@don-petry I reviewed this PR and no code changes were needed, but it still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews), so I cannot mark it done yet. I'll re-check automatically.
Next attempt after: 2026-07-17T13:26:35Z

@don-petry
don-petry enabled auto-merge (squash) July 17, 2026 12:56

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request removes the aliases field from the persona standards, template, and JSON schema. The documentation is updated to explain that aliases are structurally unsupported by index-free routing and are rendered obsolete by GitHub's behavior on team renames. Handle uniqueness is now guaranteed by construction because the slug matches the unique directory name. I have no feedback to provide on these changes.

@don-petry
don-petry disabled auto-merge July 17, 2026 12:57

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@standards/persona-standards.md`:
- Around line 256-258: Update the “To rename a role” checklist in
persona-standards.md to include address.handle alongside id and the other
renamed role metadata. State that address.handle must be updated to keep the org
team slug aligned with id, preserving the existing rename procedure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 483a5696-752f-4587-8605-4879d8afd5bd

📥 Commits

Reviewing files that changed from the base of the PR and between a3db637 and 2e2cf4b.

📒 Files selected for processing (3)
  • standards/persona-standards.md
  • standards/personas/TEMPLATE/persona.yml
  • standards/personas/persona.schema.json
💤 Files with no reviewable changes (1)
  • standards/personas/TEMPLATE/persona.yml

Comment thread standards/persona-standards.md

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Removes the address.aliases field from the persona addressing contract across the schema and standards docs, aligning the public contract with the (already-updated) implementation that no longer supports alias-based routing.

Changes:

  • Dropped address.aliases from the persona YAML template example.
  • Removed the aliases property from persona.schema.json and updated the address description to document the intentional absence.
  • Updated persona-standards.md to remove aliases from the addressing example and add a Renames section explaining why aliases are not supported.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
standards/personas/TEMPLATE/persona.yml Removes aliases from the starter manifest snippet so new personas don’t include an invalid field.
standards/personas/persona.schema.json Deletes the address.aliases property from the schema and documents that the contract intentionally has no aliases.
standards/persona-standards.md Removes aliases from the addressing docs and adds guidance explaining rename behavior without aliases.

Comment thread standards/personas/persona.schema.json Outdated
Comment thread standards/persona-standards.md Outdated
@donpetry-bot

Copy link
Copy Markdown
Contributor

CI checks on this PR are still running. Once they complete, re-mention @donpetry-bot to trigger a fresh review.

Posted by the donpetry-bot PR-review cascade.

@don-petry

Copy link
Copy Markdown
Contributor Author

@coderabbitai resolve

@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — waiting on PR blockers (intent: fix-reviews)

PR: #769
No changes were committed, but the PR still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews). The retry cron will re-attempt automatically. Next attempt after: 2026-07-17T13:36:13Z

@don-petry
don-petry enabled auto-merge (squash) July 17, 2026 13:06
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 17, 2026
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
✅ Action performed

Comments resolved and changes approved.

@don-petry
don-petry disabled auto-merge July 17, 2026 13:10
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — fix-reviews (applied)

Changes committed and pushed.

@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — review-changes (no-changes)

No changes were needed for this PR.

@don-petry
don-petry enabled auto-merge (squash) July 17, 2026 13:17

@donpetry-bot donpetry-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review — APPROVED ✓

Risk: MEDIUM
Reviewed commit: 0f42c43aaf6f5b967b17caea86b0ed7b6fcd7cd0
Review mode: triage-approved (single reviewer)

Summary

Removes the deprecated address.aliases field from the persona contract (schema, template, and standards doc) — half 2 of an ordered cross-repo pair. The declared merge-order dependency (.github-private#1289, which removed all uses of the field) is MERGED (2026-07-17T12:55:57Z), so the fleet-wide validate-personas breakage risk described in the PR body is cleared. Diff is docs + JSON Schema only, no executable code. Rationale is well-evidenced (router structurally cannot honour aliases; GitHub renders renamed-team handles as plain text).

Linked issue analysis

No formally linked closing issue. The PR substantively addresses .github#755 finding 1 (drop aliases) and follows through on the #1289 pairing exactly as described. The rename procedure is now documented in §4.1.1 with the correct signal semantics (old handles visibly stop resolving).

Findings

  • No blocking findings.
  • All 3 bot review threads (CodeRabbit rename-checklist nit, 2× Copilot §4.1.1 cross-reference numbering) are resolved; fix commit 0f42c43 renumbered the Renames section to §4.1.1 as requested. CodeRabbit's CHANGES_REQUESTED review was dismissed after resolution.
  • Minor non-blocking nit: the §4.1.1 rename checklist lists id, name, canary.agent, opt_out_label, evals.path and the org team, but does not explicitly name the manifest's address.handle field (it is implied by 'slug must keep matching id'). Cosmetic only.
  • Branch is BEHIND main; a standard update-branch before merge is sufficient.
  • Secret scan: gitleaks CI check passed. The run_secret_scanning MCP tool was not available in this run (no finding fabricated); diff contains no credential-like content.

CI status

All checks green at head 0f42c43: Analyze (actions)/CodeQL pass, Lint pass, ShellCheck pass, Secret scan (gitleaks) pass, Agent Security Scan pass, agent-shield pass, SonarCloud quality gate pass, npm audit pass, dev-lead / dispatch pass; ecosystem audits skipped (not applicable).


Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.

@sonarqubecloud

Copy link
Copy Markdown

@don-petry
don-petry disabled auto-merge July 17, 2026 13:20
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — fix-bot-comment (no-changes)

Agent reasoning
Issues addressed: 0
- No actionable issues found in SonarCloud comment (Quality Gate passed with 0 new issues)
- All previous review findings (CodeRabbit rename-checklist, Copilot cross-reference) were already resolved in commit 0f42c43 and review threads closed
Files changed: None (no fixes required)
Skipped (informational): 0
```
**Status:** ✅ PR is clean — no bot findings to address. All CI checks passing, no open review threads, and SonarCloud Quality Gate passed. The branch is ready for merge after a standard update-branch sync with main (as noted in the automated review).

@don-petry
don-petry enabled auto-merge (squash) July 17, 2026 13:20
@don-petry
don-petry merged commit 06562d3 into main Jul 17, 2026
21 checks passed
@don-petry
don-petry deleted the fix/drop-aliases-schema branch July 17, 2026 13:21

@donpetry-bot donpetry-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review — APPROVED ✓

Risk: MEDIUM
Reviewed commit: b593da53a3b7aa5e7cf05fd22398771d591118ae
Review mode: triage-approved (single reviewer)

Summary

Removes the address.aliases field from the persona contract (schema, template, and standards doc) — half 2 of an ordered cross-repo pair. The PR's stated HOLD condition is satisfied: petry-projects/.github-private#1289 (half 1, which removed every use of the field) merged at 2026-07-17T12:55:57Z, so tightening the schema (additionalProperties: false) cannot break validate-personas fleet-wide. The head commit is a merge of main; the substantive change was already reviewed and approved at 0f42c43.

Linked issue analysis

No formally linked (closing) issues. The PR substantively addresses finding 1 of #755: it removes the unreachable aliases routing mechanism, documents in new §4.1.1 why index-free routing could never honour aliases and why renamed team handles degrade to plain text (with measured evidence), and replaces the cross-file uniqueness check rationale with a by-construction argument (org pinned + slug == id + id == directory name).

Findings

No blocking findings.

  • Merge-order dependency verified: .github-private#1289 is merged, and a repo-wide grep of .github-private shows no remaining address.aliases usage in persona manifests.
  • Schema change is a pure field removal plus description updates; additionalProperties: false now correctly rejects aliases, which is the documented intended end state.
  • Docs, template, and schema are mutually consistent (schema description points at the new §4.1.1, which exists).
  • All 3 review threads (CodeRabbit rename-checklist, 2× Copilot §-numbering) are resolved; the §4.1.1 numbering suggestion was adopted.
  • Secret scanning MCP tool not available in this session; gitleaks CI check passed and the diff contains no secret-like content.

CI status

All required checks green: Lint, ShellCheck, CodeQL (actions), SonarCloud Quality Gate, CodeRabbit, Agent Security Scan, agent-shield, Secret scan (gitleaks), npm audit. Remaining checks skipped by ecosystem detection (pip/cargo/go/pnpm audits, dependabot-automerge) — expected.


Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.

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.

3 participants