Skip to content

Retarget the built-in ai-config plugin ref to the Morrison-Lab marketplace - #359

Merged
d-morrison merged 2 commits into
mainfrom
fix/ai-config-marketplace-rename
Jul 29, 2026
Merged

Retarget the built-in ai-config plugin ref to the Morrison-Lab marketplace#359
d-morrison merged 2 commits into
mainfrom
fix/ai-config-marketplace-rename

Conversation

@dem-extra1

Copy link
Copy Markdown
Collaborator

The break

ai-config renamed the marketplace declared in its own .claude-plugin/marketplace.json from d-morrison to Morrison-Lab (ai-config#802, merged 2026-07-29T06:51:55Z):

{ "name": "Morrison-Lab", "owner": { "name": "Morrison-Lab" }, ... }

A plugin ref resolves by that declared name, so the built-in ai-config@d-morrison in both claude-code-review.yml and claude.yml now matches nothing, and plugin installation aborts the run before it reviews or answers anything:

Action failed with error: Failed to install plugin 'ai-config@d-morrison' (exit code: 1)
Claude review did not complete successfully and was not eligible for a stub-review retry

Every consumer of either workflow is affected, and review / require-review fails with it, so any repo with that as a required check is unmergeable. Observed downstream in Lacaedemon/sparta (#1171): its last green review ran at 06:20:51Z, and the first run to reach plugin install after ai-config#802 failed.

The clone URL was not the problem

This is what made it awkward to diagnose. Git and gh both follow GitHub's transfer redirect, so d-morrison/ai-config.git still clones fine, and the obvious check reports success:

$ gh api repos/d-morrison/ai-config --jq .full_name
Morrison-Lab/ai-config

Only the name lookup fails. The URL is retargeted here too, but it was not what broke.

What changed

Two functional sites, both of which independently spell out the marketplace and plugin ref:

file why it matters
.github/actions/run-claude-review-attempt/action.yml the review path's plugin list
.github/workflows/claude.yml keeps its own inline copy of the same list, not shared with the composite

Plus the things CLAUDE.md's composite-plus-wrapper-plus-example rule requires stay in sync: the use-ai-config / plugin-marketplaces / plugins input descriptions in both reusable workflows, the examples/ stubs, and the website/reference/ tables that quote the identifiers.

Supersedes a deliberate earlier decision

changelog.d/retarget-doc-urls-after-org-move.fixed.md explicitly left these two identifiers alone:

as are the plugin-marketplace identifiers (ai-config@d-morrison and the d-morrison/ai-config.git clone URL), which are names rather than URLs and still match the workflows that use them.

That was correct when written -- the marketplace still declared d-morrison at the time. ai-config#802 landed afterwards and invalidated the "still match" premise. Since that fragment is unreleased, it would otherwise publish a claim that is now false, so this PR qualifies it to past tense and points at the follow-up rather than silently leaving it.

Deliberately untouched: historical CHANGELOG.md and changelog.d/ entries, and check-new-line-breaks.py's porting attribution -- all correct as records of what the repo was called when written.

Verification

The reverse of this change is what is currently failing in the wild, so the fix is confirmed by the consumer side: Lacaedemon/sparta worked around it by opting out (use-ai-config: false) and re-adding the marketplace under its current name through plugin-marketplaces / plugins, which restored reviews immediately (sparta#1172). This PR makes that override unnecessary; sparta tracks removing it in sparta#1173.

All five touched YAML files parse. No behaviour changes beyond the identifier.

…arketplace

ai-config renamed the marketplace declared in its own
.claude-plugin/marketplace.json from 'd-morrison' to 'Morrison-Lab'
(ai-config#802). A plugin ref resolves by that declared name, so the built-in
'ai-config@d-morrison' in claude-code-review.yml and claude.yml no longer
matches anything and plugin installation aborts the run:

  Failed to install plugin 'ai-config@d-morrison' (exit code: 1)

Every consumer of either workflow is affected. The clone URL was not the
problem -- git and gh both follow GitHub's transfer redirect, so the old URL
still clones and checking whether it resolves reports success. Only the name
lookup fails. Both are retargeted here regardless.

Fixes the two functional sites (run-claude-review-attempt's composite action
and claude.yml's own inline plugin list) and keeps the input descriptions,
examples/ stubs, and website/reference/ tables in sync per CLAUDE.md's
composite-plus-wrapper-plus-example rule.

Also qualifies the earlier documentation-URL retarget's changelog fragment,
which deliberately left these identifiers alone as 'names rather than URLs'
that 'still match the workflows that use them'. That was correct when
written; ai-config#802 landed afterwards and invalidated it, and the fragment
is still unreleased so it would have published a false claim.
Copilot AI review requested due to automatic review settings July 29, 2026 08:21

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Jules is reviewing this PR. Results will appear here shortly (typically 2–5 minutes).

Copilot AI review requested due to automatic review settings July 29, 2026 08:24

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@dem-extra1

Copy link
Copy Markdown
Collaborator Author

Note on the two failing checks

review / claude-review fails with the exact bug this PR fixes. gha's own review calls the released @v2 tag, not this branch, so the fix is not in effect for its own PR:

Action failed with error: Failed to install plugin 'ai-config@d-morrison' (exit code: 1)

That is the same signature as every downstream consumer right now, and it clears once this merges and v2 advances. It is not a defect in the diff, and this PR cannot self-verify for the same structural reason a consumer-side workaround cannot -- see the verification section in the description, where the fix is confirmed from the consumer side instead.

lint-markdown was mine and is fixed -- MD040, a bare code fence in the new changelog fragment, now tagged text.

Self-review

Since claude-review cannot run here, reviewing this myself:

  • Both functional sites are covered. claude.yml keeps its own inline copy of the plugin list rather than sharing the composite's, so fixing only run-claude-review-attempt/action.yml would have left the @claude agent path broken while making the review path look fixed. Verified by grepping the whole repo for both identifiers -- no occurrences remain outside deliberate historical records.
  • The sync rule in CLAUDE.md is honoured -- composite, both wrapping reusable workflows, both examples/ stubs, and both website/reference/ tables.
  • Deliberately untouched: historical CHANGELOG.md and changelog.d/ entries, and check-new-line-breaks.py's porting attribution. Those are records of what the repo was called when written, and rewriting them would falsify history.
  • One judgement call worth flagging: I edited another PR's unreleased changelog fragment (retarget-doc-urls-after-org-move.fixed.md). Its claim that these identifiers "still match the workflows that use them" was true when written and is now false, and since the fragment has not shipped it would otherwise publish that claim. I qualified it to past tense and pointed at this follow-up rather than deleting or silently rewriting it. Revert that hunk if you would rather the fragment stand as originally authored.
  • Risk if wrong: the failure mode is loud and immediate -- a mismatched marketplace name aborts plugin install outright rather than degrading quietly -- so a mistake here surfaces on the first run after the tag moves, not subtly later.

Verdict: ready for merge, with the caveat that the claude-review failure above must be read as expected rather than waived without checking. Worth confirming the first consumer run after v2 advances actually installs the plugin.

@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

🤖 Jules Review

Summary

This PR correctly updates all references to the built-in ai-config plugin and its marketplace repository to reflect the organization rename from d-morrison to Morrison-Lab. This prevents immediate installation failures caused by the marketplace identifier mismatch.

Strengths

  • Thoroughness in updating not just the runtime workflow files, but also the examples, documentation tables, and changelogs.
  • Excellent changelog hygiene by explicitly qualifying the historical record rather than silently rewriting an older, published changelog entry.

VERDICT: approve


Session: 8351913827756348094

@github-actions

Copy link
Copy Markdown
Contributor

👀 Picked up by workflow run #30435383964. Setup runs first; Claude itself responds after that.

@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.

2026-07-29 08:29 UTC

@dem-extra1

Copy link
Copy Markdown
Collaborator Author

Final CI state

Jules: approve. Every check passes except the two that structurally cannot:

check state
jules/review pass -- verdict: approve
lint-markdown pass (the MD040 fence was mine; fixed in the second commit)
all other 25 checks pass
review / claude-review fail -- with the exact bug this PR fixes
review / require-review fail, downstream of the above
Copilot quota-exhausted, no review

The claude-review failure is the circular dependency: gha calls its own workflow via the released @v2 tag, so the fix on this branch is not in effect for this branch's CI. It clears once this merges and v2 advances -- it is not a code problem, and re-running will reproduce it indefinitely.

That makes the merge a human call. A failing required check is not something to merge past autonomously, so I am handing this over rather than forcing it. Two things worth doing on your side:

  1. Merge past require-review (or relax it briefly), then advance v2.
  2. Confirm on the first consumer run afterwards that claude-review actually installs the plugin and posts a verdict. If it still dies at install, the diagnosis needs another round rather than being settled -- that check is the real proof, not this PR's own green checks.

The consumer-side evidence is already in: Lacaedemon/sparta applied the equivalent override and its reviews resumed immediately, including a genuine 16m41s review run.

@d-morrison
d-morrison merged commit c50e847 into main Jul 29, 2026
27 of 29 checks passed
@d-morrison
d-morrison deleted the fix/ai-config-marketplace-rename branch July 29, 2026 08:28
d-morrison pushed a commit that referenced this pull request Jul 29, 2026
* docs: record why a re-run cannot verify a major-tag slide

Hit while verifying #359's release. After v2 was slid to c50e847, a re-run
of the run that had failed still failed with the same
'ai-config@d-morrison' error, because GitHub replays the reusable-workflow
SHA recorded in referenced_workflows at the original run's creation.

The confusing part is that nested composite actions DO re-resolve at
job-preparation time, so the same job log showed a c50e847-only echo line
next to the old workflow's INPUT_PLUGINS -- which reads as the fix being
live but ineffective, rather than not yet live.

Documented next to the existing "can't self-verify before merge" section,
since that one ends at the merge and this covers the step after it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012PKotEhi2qeEQ1kZwuFES8

* docs(review round 1): distinguish the two re-run modes

Review correctly found that "the UI's re-run button" and "never a re-run"
were overbroad. Verified against GitHub's own docs -- read from the docs
source (data/reusables/actions/partial-reruns-with-reusable.md), since
docs.github.com returns 403 to this environment:

  * Re-running all jobs in a workflow will use the reusable workflow from
    the specified reference.
  * Re-running failed jobs or a specific job in a workflow will use the
    reusable workflow from the same commit SHA of the first attempt.

So only the failed-jobs/specific-job path is stale; "Re-run all jobs"
re-resolves the tag. Narrowed the heading and the closing advice, quoted
the docs inline so a later reviewer re-deriving this finds the citation in
place rather than in thread history, and added the docs' own
reference-is-not-a-SHA precondition.

Also addressed the reviewer's second point: the composite carve-out means a
failed-jobs re-run CAN surface a slide whose only change lives in a
composite, so the section now says what such a re-run cannot verify is a
change to the reusable workflow's own content.

The observed case was an API rerun_failed_jobs, which the narrowed claim
still covers exactly; the evidence did not change, only its scope.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012PKotEhi2qeEQ1kZwuFES8

* style: use dash bullets in the quoted docs block (MD004)

lint-markdown's MD004/ul-style requires dash markers; the block quoted
GitHub's docs verbatim, which use asterisks. Only the list marker changed;
the quoted wording is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012PKotEhi2qeEQ1kZwuFES8

* docs(review round 2): name all three failed-jobs re-run spellings

Review flagged that backticked `rerun_failed_jobs` reads as a precise API
citation but matches no REST endpoint. The concern is right; the stated
grounds are only partly so. `rerun_failed_jobs` IS a real identifier -- it
is the GitHub MCP server's `actions_run_trigger` method value, and the
literal call the anecdote describes -- but it is not the REST or CLI name,
so backticking it alone invites a reader to hunt for an endpoint by that
name.

Rather than swap one surface's spelling for another, name all three and say
that none is canonical: the REST path segment, `gh run rerun --failed`, and
the MCP method. Dropped the "API" qualifier from the anecdote, which was
what made the single spelling read as authoritative.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012PKotEhi2qeEQ1kZwuFES8

---------

Co-authored-by: Claude <noreply@anthropic.com>
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.

4 participants