Repository navigation
Description
Report
- Received: 2026-10-31, diagnostic archive from the options page
- Extension: v1.0.0-beta.19 · Chrome 156 · Windows · UI language
fr - Page: Move the tests to xunit.v3 4 and answer reviews with Conventional Comments first-class-errors#472 (Conversation)
- github.com release:
c4e7b7c92131 - Journal line: chain
merge-button, problemcompletion-control, count 1,prState: pullOpened, logged 2 ms after the visit started
Full archive, as received, on branch diagnostic/2026-10-31-merge-button (stores the report only, no fix, not meant to be merged):
- the
.zip`` - its content: README.txt,```` report.json,````` the page skeleton`````` (2,551 lines)
report.json
{
"extension": "v1.0.0-beta.19",
"browser": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
"language": "fr",
"degradedState": null,
"generatedAt": "2026-10-31T09:23:58.876Z",
"entries": [
{
"at": "2026-10-31T09:23:50.844Z",
"candidates": [
"[data-testid=\"mergebox-partial\"] [data-component=\"ButtonGroup\"] button[data-variant=\"primary\"]",
"[data-testid=\"mergebox-partial\"] button.btn-primary",
"button[data-testid*=\"merge-button\"]",
".merge-message button.btn-group-merge",
"button.js-merge-commit-button"
],
"chain": "merge-button",
"count": 1,
"evidence": {
"anchor": {
"ancestors": [
"div[data-testid=\"mergebox-border-container\"]",
"div[data-testid=\"mergebox-partial\"]",
"div[data-component=\"SplitPageLayout.Content\"]",
"div[data-component=\"SplitPageLayout\"]"
],
"attrs": {
"class": "flex-self-stretch flex-shrink-0 undefined prc-ButtonGroup-ButtonGroup-vFUrY",
"data-component": "ButtonGroup"
},
"tag": "div"
},
"facts": {
"prState": "pullOpened",
"release": "c4e7b7c92131"
},
"msSinceVisit": 2,
"nearby": [
{
"ancestors": [
"div[data-component=\"ButtonGroup\"]",
"div[data-testid=\"mergebox-border-container\"]",
"div[data-testid=\"mergebox-partial\"]",
"div[data-component=\"SplitPageLayout.Content\"]"
],
"attrs": {
"aria-disabled": "false",
"class": "prc-Button-ButtonBase-9n-Xk flex-1",
"data-component": "Button",
"data-variant": "default",
"type": "button"
},
"tag": "button"
}
],
"trace": [
{ "candidate": "[data-testid=\"mergebox-partial\"] [data-component=\"ButtonGroup\"] button[data-variant=\"primary\"]", "steps": [1, 1, 0] },
{ "candidate": "[data-testid=\"mergebox-partial\"] button.btn-primary", "steps": [1, 0] },
{ "candidate": "button[data-testid*=\"merge-button\"]", "steps": [0] },
{ "candidate": ".merge-message button.btn-group-merge", "steps": [0, 0] },
{ "candidate": "button.js-merge-commit-button", "steps": [0] }
]
},
"firstAt": "2026-10-31T09:23:50.844Z",
"platform": "github",
"problem": "completion-control",
"skeleton": "mvw7201i-4sm6c7",
"url": "https://github.com/Reefact/first-class-errors/pull/472",
"urls": ["https://github.com/Reefact/first-class-errors/pull/472"]
}
]
}Every candidate came back empty. The first one stops at its last step (mergebox-partial 1 → ButtonGroup 1 → button[data-variant="primary"] 0).
What the skeleton shows
The merge box, skeleton lines 1226–1232 and 1836–1850:
div data-testid="mergebox-partial" class="tmp-ml-md-6 tmp-pl-md-3 tmp-my-3"
h2 class="sr-only"
div class="mergePartialContainer__VUMolp position-relative partial-pull-merging-analytics-j"
div data-testid="mergeability-icon-wrapper" class="d-none d-lg-block"
div class="d-flex flex-justify-center flex-items-center mr-2 rounded-2 height-2"
svg role="img" aria-label="Checks failing" data-component="Octicon" class="octicon octicon-git-merge fgColor-onEmphasis"
div data-testid="mergebox-border-container" class="border rounded-2 borderColor-default"
… (sections: checks — one failing required check, two skipped, the rest successful)
div class="bgColor-muted borderColor-muted tmp-p-3 rounded-bottom-2"
div class="d-flex flex-column flex-sm-row flex-sm-items-center gap-2 undefined"
div data-component="ButtonGroup" class="flex-self-stretch flex-shrink-0 undefined prc-ButtonGroup-ButtonGroup-vFUrY"
div class="prc-ButtonGroup-Item-PqvDl"
button type="button" data-component="Button" data-variant="default" aria-disabled="false" class="prc-Button-ButtonBase-9n-Xk flex-1"
span data-component="buttonContent" class="prc-Button-ButtonContent-Iohp5"
span data-component="text" class="prc-Button-Label-FWkx3"
div class="prc-ButtonGroup-Item-PqvDl"
span class="f6 fgColor-muted"
button data-component="Link" class="prc-Link-Link-9ZwDx"
div data-component="Stack" class="text-small flex-justify-end px-1 py-2 prc-Stack-Stack-UQ9k6"
span class="fgColor-muted pr-1"
button type="button" data-component="Button" data-variant="link" class="prc-Button-ButtonBase-9n-Xk Link--muted Link--inTextBlock text-normal"
This is the merge box of capture 01 (test/fixtures/pages/01) node for node: one ButtonGroup with an empty second item, the "command line" link, and the "Convert to draft" row. One attribute differs:
| capture 01 (checks green) | this report (a required check failing) | |
|---|---|---|
| merge button | data-variant="primary" |
data-variant="default" |
The skeleton keeps no text, so the button's label that day is unknown ("Merge…" or "Enable auto-merge").
Analysis
- Cause:
selectors.mergeButtonkeyed on the button's variant, which follows the state of the checks. Nothing matched, somerge-buttonwas logged. - Effect: §6.5 greyed nothing on the very PR whose checks were failing. The greying is visual only and never intercepts a click, so nothing is blocked or unblocked by this defect.
- Severity tier: can wait for the batch (no change to what the extension blocks).
- Pattern to look for across reports: a selector that depends on an attribute the page changes with its STATE (variant, color, disabled), not its structure.
Candidate fix
Branch claude/new-session-ovwve7, not merged: [data-testid="mergebox-partial"] [data-component="ButtonGroup"] button[data-component="Button"].
- Measured in Chromium on the 8 captures: the same element as before on capture 01, nothing on the merged PRs and on the Files changed views.
- Verified by removal: restoring the
primarycandidate makes the new real-page test fail withexpected undefined to be <button …>.
Not measured
Any merge box state with another button that might sit in a ButtonGroup before the merge button: merge conflict, branch behind base ("Update branch"), several merge methods, the confirmation step after the click, draft, merge queue, bypass (danger). Captures of a conflicted PR and of a PR behind its base would settle the main risk.
Activity
Reefact commentedon Oct 31, 2026
issue (non-blocking): Repair the diagnostic archive links
[the .zip](``https://...zip)``). They do not form valid Markdown links, making the retained diagnostic artifacts unnecessarily difficult to open from this issue. Replace them with ordinarylabel` links using the existing commit-pinned URLs. This affects issue navigation only; it does not change the diagnosed selector failure.docs: prepare 1.0.0-beta.20
Reefact commentedon Nov 1, 2026
Same cause, another state of the checks: in progress (v1.0.0-beta.20, 2026-11-01)
frprState: pullOpenedc4e7b7c92131(unchanged since the first report)merge-button, problemcompletion-control,count: 2,recoveredVisits: 1,lastRecoveredAfterMs: 2084,firstAt23:26:30 UTC, last observation 23:33:38 UTC, 5 ms into the visit — the visit that began when the service worker re-injected the content script into the open tab (see content script not injected on a github.com page load, even after reload, until the service worker wakes up (v1.0.0-beta.19) #118)[1, 1, 0]for the first candidate (mergebox-partial1 →ButtonGroup1 →button[data-variant="primary"]0), every other candidate at 0.Archive kept on branch
diagnostic/2026-11-01-registration-merge-button: the .zip,`` report.json,```` the page skeleton.`````What the skeleton shows
Merge box fully rendered at the instant of the failure (no loading spinner, unlike #116). Skeleton lines 4299 and 4320, 4417, 4534–4541:
The button group is node for node the one of the first report and of capture 01. The one attribute that differs is the same one:
data-variant="primary"data-variant="default"data-variant="default"Analysis
data-variantfollows the state of the checks, andselectors.mergeButtonkeys on it. "In progress" is a second state, after "failing", in which the button isdefault. The mergeability icon says "Able to merge" and the button is enabled (aria-disabled="false"), so the PR was mergeable at that instant: the variant is not "mergeable or not", it is "all checks green or not".recoveredVisits: 1ofcount: 2— on one of the two visits the chain found its element later (2,084 ms). Which visit is not identifiable from the line (journal: a too-early probe overwrites the evidence of an unrecovered merge-button failure (v1.0.0-beta.19) #116). Checks finishing during a visit, turning the buttonprimary, would produce exactly that; not measured.button[data-component="Button"]instead of the variant) would match this skeleton too: oneButtonin the group, in the first item.Not measured
Still the same states: merge conflict, branch behind base, several merge methods, confirmation step, draft, merge queue, bypass. This report adds nothing on those.
Generated by Claude Code
feat(github): support the pull request Overview page
feat(github): support the pull request Overview page
feat(github): support the pull request Overview page
docs(skill): link diagnostic archives and skeletons through their folder
docs(skill): link diagnostic archives and skeletons through their folder