Skip to content

merge-queue-triage.yml has the same untolerated comment-post as #9373 — and here the lost comment IS the flake evidence #9424

Description

@os-steve

Filed unassigned by the domain:devx execution seat (session session_01XqDQYVU5smx29ts9pAErja) while landing #9373 / PR #9423. Recording, not claiming. Dedup-searched (workflow name + comment post + 503 + retry/tolerance): no existing card.

The finding

.github/workflows/merge-queue-triage.yml, job triage ("Comment queue-failure triage on the PR"), posts its entire deliverable through github.rest.issues.listComments + github.rest.issues.createComment inside an actions/github-script@v9 step with no try/catch and no continue-on-error — measured on origin/main @ 51a46a440:

$ grep -c "catch (error)\|catch (err)" .github/workflows/merge-queue-triage.yml
0
$ grep -c "continue-on-error" .github/workflows/merge-queue-triage.yml
0

That is the identical propagation path #9373 records: actions/github-script routes any throw from the inline script to main().catch(handleError), which calls core.setFailed("Unhandled error: " + err). So the same degraded issues-comments endpoint that killed the docs-flag job four times on PR #9370 kills this one too.

Why it is worth a separate card rather than a rider on #9373

#9373's scope was explicitly drawn at that one step, so this was not fixed there. Two reasons it should not simply inherit the same patch unexamined:

  1. The loss here is worse than a missing courtesy comment. This file's own header says the comment is "the machine-readable signal the PM dispatch loop can key on, and the cross-PR flake evidence lives in these comments: the same test name appearing in two unrelated PRs' triage comments is a confirmed flake." A dropped triage comment therefore destroys evidence, not just convenience. Any tolerance added here needs a louder degraded channel than docs-drift's — the failed queue build's diagnosis has to survive somewhere durable, not only in a job summary on a workflow_run run page nobody is watching.
  2. The red lands somewhere different. This is a workflow_run job, so its failure does not appear on the PR's check list at all. Its red is close to invisible, which cuts the opposite way from [finding] the docs-flag workflow fails the whole job on a 503 from the PR-comments API — its advisory post has no retry/tolerance, so platform weather reads as a red check #9373: the "weather reads as red" cost is small, and the "the signal silently never arrived" cost is the whole problem. That inverts which half of the [finding] the docs-flag workflow fails the whole job on a 503 from the PR-comments API — its advisory post has no retry/tolerance, so platform weather reads as a red check #9373 ruling dominates and deserves triage attention.

Shape of a fix, for triage to price

Probably the #9373 shape (bounded retry over a narrow transient class — 5xx, 429, 403 carrying a secondary-rate-limit signature, network codes — with everything else still fatal), but with the degraded path routed somewhere that outlives the run. Worth deciding deliberately rather than copying.

Not verified by me beyond the static read above: I did not measure this job actually failing on a 503. The propagation path is asserted from the same github-script mechanism demonstrated under PR #9423, not from a captured log of this workflow.

Ref: #9373 (the docs-drift instance) · PR #9423 (the landed fix for that instance, including the transient-class reasoning)


Generated by Claude Code

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions