Repository navigation
docs(board): the merge does not move the board — move it yourself - #400
Conversation
CLOUD-192 The board transitions to Done on merge, not on release — In Review is never occupied
Why. The board is the observability surface, and its states are defined against a trunk-based model: In Review = landed on Measured. PR #103 merged at The end state converged here only because release-plz happened to release promptly. The transition is keyed on the wrong event, so the failure is latent rather than absent:
This also supersedes a recorded observation in Acceptance.
Implementation, 2026-08-13. Re-measured before touching anything. The defect is still live and unchanged from the original CLOUD-168 observation: CLOUD-499's state history reads The two halves have different owners, and only one is code.
So the repo ships the half it can hold: the consequence. The board was corrected rather than grandfathered. Piping the full Done closure (159 issues) exited 1 and named five: CLOUD-404, CLOUD-484, CLOUD-491, CLOUD-495, CLOUD-499 — each landed, each in no tag. All five moved to In Review, Fewer than the 50 unreleased commits would suggest, because an issue is judged by its most-released ref: work carrying several PRs, some shipped, passes. That is CLOUD-468's question and this gate deliberately does not answer it. Notes. If the integration cannot key The automation is not simply slow: What that rules in and out:
The untested hypothesis is Linear's closing vs contributing PR distinction, which the settings page names in its own copy. #398's body carries It is not settled by the earlier counter-evidence in the memory (#131 completing on merge with only a Next step, and it is cheap: land any PR whose body carries a closing keyword for its issue and read the state history. If it moves to In Review and a This issue is moved to In Review by hand, which is the truthful column for landed-and-unreleased work and is precisely the hand-move the mechanism was supposed to make unnecessary. |
Measured on #398, the PR that landed the setting change: merged 06:27:05, all checks green, and CLOUD-192 still read In Progress 8m21s later with no In Review entry. The open side fired normally on the same PR, so Linear had the issue and the link and did nothing on merge. The claim this replaces was mine, landed one PR ago, and an agent reading it would wait for a board move that never comes. Closes CLOUD-192
d6d1968 to
ff0546f
Compare
|
|
/fast-forward |
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192
…loses it The merged-event automation fires only for a CLOSING pull request. Measured as a controlled pair on one issue, one variable: #398 `Refs: CLOUD-192` merged 06:27:05 never moved #400 `Closes CLOUD-192` merged 06:59:39 In Review 06:59:41 issue-guard already forces a key onto every PR, so every PR here names its issue and none of them close it — the convention was satisfied and the outcome still wrong. It is invisible when broken: nothing reds, the PR merges, the board is quietly one column behind. DO-NOT-CLOSE opts out, for the several-PRs-per-issue case (CLOUD-186). Refs: CLOUD-192



The previous PR (#398) changed the tracker's merged-event mapping from
DonetoIn Reviewand updatedmem:workflow/board-statesandAGENTS.mdto say themerge writes that column for you.
Measured on #398 itself, and it does not. Merged
06:27:05, all eightrequired checks green. CLOUD-192 still read
In Progressat06:35:26—8m21s later — with no
In Reviewentry anywhere in its state history.Not lag, and not any of the obvious causes:
claude/cloud-192-implementation-9l6mcgcarriescloud-192, andlinear-code[bot]commented on the PR at06:12:20andattached it to CLOUD-192. Linear had the issue and had the link.
still showed "On PR merge, move to… In Review". A dropdown selected but
never saved is ruled out by measurement, not assumed away.
state: MERGED,mergedAtset, and thetimeline carries
merged+closed. A fast-forward landing is not invisible.So the contract this repo shipped one PR ago is wrong, and wrong in the
expensive direction: an agent reading it waits for a board move that never
comes, and the board silently understates what has landed. The claim was mine;
this retracts it.
Also a probe
This PR's body carries a closing keyword (
Closes CLOUD-192) where #398carried only a
Refs:trailer, and CLOUD-192 was moved back toIn Progressfirst so the transition is observable. That tests Linear's closing vs
contributing split — the one explanation still standing.
In Reviewon merge, the cause is the keyword, and thefix is repo-side:
land/issue-guardemit the closing form, shipped with agate.
all, and the hand-move this PR documents is the answer rather than a stopgap.
Either result is recorded on the issue.
done-check(landed in #398) holds theother end regardless — a
Donethat shipped in no release is already a failingcheck.
Closes CLOUD-192