Retarget every uses: reference to Morrison-Lab/gha - #351
Conversation
The repository moved to the Morrison-Lab organization, and Actions does not follow a repository-transfer redirect when resolving a reusable workflow. Every run on the old path now fails at startup, before any job is scheduled: Invalid workflow file: .github/workflows/claude-review.yml#L122 error parsing called workflow ... "d-morrison/gha/.github/workflows/ claude-code-review.yml@v2" : workflow was not found. That is what has been failing `review / claude-review` since the move, with zero jobs and a run that cannot even be retried. Retargets all 105 `uses: d-morrison/gha/...` references: the reusable workflows' internal composite and workflow calls, the `examples/` caller stubs, and the copy-paste blocks in README.md and website/reference/. Major tags are untouched -- the six `@v1` references stay `@v1`. Prose references are deliberately left alone: a `https://github.com/ d-morrison/gha` link and a `#284` issue reference both still resolve through the web redirect, and renaming them throughout is a documentation decision rather than part of this breakage fix. REVDEPS.md's discovery search now covers both paths, since a consumer still on the old one is broken rather than merely stale. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCBscsqbuxXgaZKLNxef7d
|
CI is red on this PR, but not because of the diff — no job on this run ever Every job that needed a runner failed; every job that did not was skipped.
No job produced any logs. The diff cannot explain it. - # `uses: d-morrison/gha/lint-*@v2` step resolves against yet. Exercise the
+ # `uses: Morrison-Lab/gha/lint-*@v2` step resolves against yet. Exercise theThe same jobs, from the same file, passed on #337 at 17:27 today. This is a second, separate breakage from the one this PR fixes. The Once runners are available again, this needs a re-run rather than a new Generated by Claude Code |
|
Correction to the comment above: billing is not the cause. The org's Everything else in that comment stands: no job produced logs, the three What remains is a job-prep failure — the runner never picked the job up. The Generated by Claude Code |
|
Definitive answer, read off the job page's error banner rather than inferred.
That reconciles the two things that looked contradictory. Standard runners The org page looking clean suggests the lock sits on the account that pays Nothing in this PR needs to change. Its own diff is untestable until the Generated by Claude Code |
|
Working on this — paws off until I'm done. Self-review, posted because no bot verdict is obtainable (see the bottom of this comment for why). Blocking: the premise this PR rests on is contradicted by the run logsThe PR body's central claim is that On #348, run 30381893910 (17:13 today),
I can't rule out that the quoted error was real during a propagation window right after the transfer — transfers aren't instant, and I have no run ID for it. But it isn't reproducible now, so the PR body should cite the failing run rather than assert the mechanism, and the "this is what has been failing This doesn't make the change bad. Retargeting 105 references to the canonical org name is defensible on naming grounds alone, and the diff looks mechanically clean. It means the justification and the urgency need rewriting — as a rename, not a repair. What is actually failing
|
|
Correcting and extending my review above, now that Actions is unlocked and I was wrong to accept this PR's "prose references are stale rather than broken" scoping. It is the one part of the PR body I let stand, and it is false. Retracting it, with the evidence.
|
| File | Broken links |
|---|---|
website/workflows.qmd |
gha/issues/ 143, 182, 252, 254, 325 |
README.md |
the same five |
REVDEPS.md |
gha/issues/75, ai-config/issues/401, ai-config/issues/702 |
changelog.d/fix-preview-family-stale-v1-examples.fixed.md |
ai-config/issues/401, gha/issues/182 |
changelog.d/raise-deno-v8-heap-cap.fixed.md |
gha/issues/262 |
changelog.d/report-failure.added.md |
gha/issues/325 |
Note the split, because it is what makes this non-obvious: repository, tree, blob, and pull URLs all redirect cleanly (gha/pull/34 → 301 ✅), and so does gha/issues/33. But issues 75, 143, 182, 252, 254, 262, and 325 return 404 outright. Whatever the destination repo received, it did not receive those issues, so there is nothing for the redirect to land on. d-morrison/ai-config behaves the same way — it has also moved to Morrison-Lab/ai-config, and its issue links 404 too, which puts references to a second org in scope.
This is pre-existing on main, not caused by this diff
Verified three ways:
website/workflows.qmdis not in this PR's changed-file list.- Prose
github.com/d-morrison/ghalinks number 58 onmainand 58 on this branch — identical. links / link-checkerpassed on Constrain what may followreview, and fix two runner-portability gaps #348 at 17:12 and check-new-line-breaks: add clause-break check (SemBr rule 5), on by default #337 at 17:26, then failed here at 18:00. The transfer landed between those times; the links didn't change, their destinations did.
So the practical consequence is bigger than this PR: every open PR in this repo will now fail links / link-checker, #337 and #348 included, for a reason none of their diffs caused.
What this means for this PR
It strengthens the case for the change while further undermining the stated rationale — the two findings point in opposite directions, which is worth being explicit about:
- The
uses:retargeting fixes something that, per my earlier comment, is not currently broken. - The prose references this PR deliberately left alone are broken, and are the only thing actually failing CI.
The PR is scoped to skip the one category that would turn a check green. I'd suggest widening it to rewrite the prose links too (including the d-morrison/ai-config ones) rather than filing that separately — this is already the reference-retargeting PR, and splitting it leaves main red in the meantime.
Two caveats on the fix, since a blind d-morrison → Morrison-Lab sweep would get them wrong:
- A rewrite alone will not clear the 404s.
Morrison-Lab/gha/issues/325is equally missing. Those seven issues need to be recreated, remapped to their new numbers, or excluded in lychee config — decide which before rewriting, or the check stays red with tidier URLs. .github/actions/parse-workflow-ref/tests/run-tests.shmust keep itsd-morrison/ghafixtures, as this PR already correctly notes — they are parser inputs, not links.
Verdict
Needs more work. Same as before, plus this: the PR body's prose-reference reasoning is now contradicted by a red check on this very PR, so it needs correcting rather than just re-framing.
Still nothing pushed — the issue-number question above is a decision for you, and it determines what the fix should even look like.
Generated by Claude Code
|
Retracting my first comment's blocking finding. This PR's premise is correct and I was wrong. I claimed the The evidence that settles itI re-ran #348's review workflow. Same run, same head commit, same workflow file — two attempts:
Run 30381893910. Attempt 2 produced no jobs at all. Nothing in the repository changed between the two — only the environment did. So And the confirming half, which is the part that matters most: this PR's own (That run got past startup and then skipped its steps on the self-mod guard, as the PR body predicted — so it still isn't a review of this diff. But startup is the thing in question here.) Where my error came from, since it is worth not repeatingI read run logs from 17:12 and 17:27 and treated them as current. They were 30-45 minutes old, and the transfer's redirect behavior changed inside that window. The general lesson is one this repo's own Two knock-on corrections:
What still stands from my second commentThe VerdictReady for merge, on the The link-checker fix can ride along here or land as a follow-up; it is a separate breakage from the same transfer, and it is not a reason to hold this. My apologies for the noise — the first comment argued confidently against a correct diagnosis. Generated by Claude Code |
2026-07-28 18:08 UTC |
|
One more correction, this time to my own second comment. I claimed the missing issues would need recreating. I asserted that without testing it, and it is wrong. What I said:
I inferred "equally missing" from the
Every issue I could reach exists at the new org. So the mechanism is narrower and more interesting than "the issues are gone": the transfer redirect covers repository, tree, blob, and The practical consequence is that the fix is much cheaper than I made it sound:
Net effect on this PR: widening scope to the prose links is now a straightforward mechanical sweep of the same kind the PR already does for Sorry for the churn — that is two corrections from me on this PR, both from treating an inference as a finding. The Generated by Claude Code |
GitHub's repository-transfer redirect covers repository, tree, blob, and pull paths, but not issues paths, so a d-morrison/gha/issues/N URL now 404s rather than redirecting. Verified: /issues/336 returns 200 while the d-morrison form does not resolve. links / link-checker is already red on main over 17 such URLs; these two added lines would have contributed an eighteenth. #351 retargeted `uses:` references but deliberately left prose links alone, so these are not covered by the merge of main that this branch just took. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X4epyWdSsXs88wgDNTaKvc
The shared CI repo moved from d-morrison/gha to Morrison-Lab/gha. GitHub Actions does not follow a repository-transfer redirect for a 'uses:' reference, so every caller of a gha reusable workflow has been failing at startup -- no jobs scheduled, and not re-runnable. Upstream retargeted its own internal references in Morrison-Lab/gha#351; this follows for our 11 call sites. All ten distinct referenced paths were verified to resolve at Morrison-Lab/gha@v2 before this change. Closes #1159
Review findings on #352. The PR fixed every `d-morrison/{gha,ai-config}` URL, which was its stated scope, but left the non-hyperlinked mentions -- and #351 had already changed the code those mentions describe, so some had become factually wrong rather than merely stale: - CLAUDE.md said claude-review.yml "calls `d-morrison/gha/.github/workflows/claude-code-review.yml@v2`" and claude-bot.yml likewise; both files read `Morrison-Lab/gha/...@v2`. - The same pattern for request-dependabot-review.yml and report-failure.yml. - README.md and website/index.qmd handed consumers `d-morrison/gha/<name>@vN` as the reference syntax, a path that no longer resolves. `CLAUDE.md`'s MCP guidance needed more than a rename. It said to call with `owner: d-morrison`, and simply swapping the owner would have been wrong in the other direction: this session is scoped to the old name, where `owner: Morrison-Lab` fails with `Access denied: repository "morrison-lab/gha" is not configured for this session` and `add_repo` refuses the cross-owner add. The section now states the current name and the rule that actually matters -- use whichever owner the session was scoped with, because the two are not interchangeable at the tool layer even though they are one repository. Deliberately kept: - `ai-config@d-morrison` and the `d-morrison/ai-config.git` clone URL. These are marketplace names, not URLs, and the workflows still use them; renaming the docs alone would make them disagree with the code. - REVDEPS.md's "not yet migrated" search, which exists to find consumers still on the old path. - Historical entries in CHANGELOG.md and changelog.d/, which record the name the repository had at the time. Checked for the MD013 regression the previous commit fixed: none. The check models lint-qmd's actual config (`line_length: 80, code_blocks: false, tables: false`) plus markdownlint's non-strict rule of ignoring a line with no space past the limit, and was validated by reproducing exactly the one violation lint-qmd reported at 2fb74d1 before returning clean here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCBscsqbuxXgaZKLNxef7d
Brings in the org-move documentation sweep (#351, #352). This branch predates it, so its tree still carried 18 `https://github.com/d-morrison/{gha,ai-config} /issues/<n>` URLs -- the shape GitHub does not redirect after a transfer, which returns a bare 404 and fails `links / link-checker`. 0bde33e fixed the #336 links this PR itself adds, but lychee scans the whole tree, not the diff. Clean merge, no conflicts: #352 touched documentation, this branch touches `check-new-line-breaks/`. Verified after merging: no `d-morrison/{gha,ai-config}` URL remains in any `.md`/`.qmd`, the clause check is intact (`_DEFAULT_CLAUSE_BREAKS = True`, `has_late_semicolon`), all 58 unit tests pass, no MD013 violation in the two changed `.qmd` files against the new base, and the repo's own new-line-breaks check reports clean on the merged diff. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCBscsqbuxXgaZKLNxef7d
What's broken
The repository moved to the
Morrison-Laborganization. Actions does notfollow a repository-transfer redirect when resolving a reusable workflow, so
every run on the old path now fails at startup, before any job is
scheduled:
That is what has been failing
review / claude-reviewon this repo's PRs. Thesignature is distinctive:
conclusion: failure, zero jobs, andcreated_at == run_started_at == updated_at. The run cannot be retried(
403 This workflow run cannot be retried) because there is no job to rerun.Worth separating from a superficially similar failure: a
claude-reviewjobthat runs and then fails is the bot itself. A
claude-reviewrun with nojobs at all never read the diff.
What this changes
All 105
uses: d-morrison/gha/...references becomeuses: Morrison-Lab/gha/..., across 84 files:.github/workflows/examples/README.md,website/reference/Major tags are untouched: the six
@v1references stay@v1, the ninety-nine@v2stay@v2. The change is confined to lines matchinguses:— nothingelse in the diff.
REVDEPS.md's consumer-discovery search now covers both paths, since aconsumer still on the old one is broken rather than merely stale.
What this deliberately does not change
Prose references — a
https://github.com/d-morrison/ghalink, ad-morrison/gha#284issue reference, comments like "notd-morrison/gha's owntree". Those still resolve through GitHub's web redirect, so they are stale
rather than broken, and renaming the repo throughout the documentation is a
naming decision rather than part of this fix.
CLAUDE.mdis in the samecategory.
.github/actions/parse-workflow-ref/tests/run-tests.shkeeps itsd-morrison/gha/...fixtures too: they are inputs to a string parser, andwhat they exercise is unaffected by which org the repo lives in.
This does not fix existing consumers
It fixes the references inside this repository. A consumer repo whose
.github/workflows/still saysd-morrison/ghastays broken until that repois updated —
REVDEPS.mdlists the registered ones, and the second searchcommand finds unregistered ones.
If keeping
d-morrison/ghaworking for consumers matters more than thisfix, there is a cheaper alternative: restoring that name (transferring back,
or creating a repo there that proxies) would fix every consumer at once
without anyone editing their callers, and would make this PR unnecessary.
That trade is yours to make; this PR takes the "new org is canonical" branch.
Verification
uses:reference to the dead path remains anywhere in the repo.@v1, 99 ×@v2— unchanged frombefore.
Review note
This PR touches
.github/workflows/claude-review.yml, which tripsclaude-code-review.yml's "Skip self-review when the PR edits this workflow"guard. The
claude-reviewcheck will therefore go green with every stepafter the guard skipped — no review will have run. That is documented
behavior, not a passing verdict, and it cannot clear before merge since it
keys on this PR's own diff. Please read the diff rather than trusting the
check. It is mechanically uniform, so a skim of a few lines plus the counts
above covers it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VCBscsqbuxXgaZKLNxef7d
Generated by Claude Code