Skip to content

docs(ci): landing a PR when main moves under you (runbook + AX entry 58) - #1742

Open
lilyshen0722 wants to merge 13 commits into
mainfrom
docs/landing-pr-strict-protection
Open

lilyshen0722 wants to merge 13 commits into
mainfrom
docs/landing-pr-strict-protection

Conversation

@lilyshen0722

Copy link
Copy Markdown
Contributor

What

A runbook for the failure that ate six hours on 2026-09-18: four finished, gated PRs that could not be merged, rebased six times, with the blocker never once being review.

docs/runbooks/landing-a-pr-under-strict-protection.md records:

  • the two settings to measure first (strict: true, and allow_update_branch: false / allow_auto_merge: false as measured today) and why they mean a green BEHIND PR is unpressed-able by anybody;
  • that there is no UI remedy while allow_update_branch is false — so "Update branch" is not advice anyone can act on;
  • the window arithmetic (main merging every ~20 min against a 10–14 min check set);
  • patch-id as the cheap way to carry a gate across a head rewrite;
  • that the base guard rejects stacked PRs by design, with the measured 14-vs-5 check counts that make the child's green short rather than clean;
  • the --onto rebase for a squash-merged parent, and the verify step afterwards.

Plus AX audit entry 58: pr-base-freshness.yml's comment reads as an endorsement of stacked PRs while pr-base-guard.yml, in the same directory, rejects them. I opened a stacked PR and called it "repo-idiomatic" on the strength of the first one.

Merge timing

Docs-only, no press needed now — the queue is being drained and this should wait its turn.

Verification

Doc + audit entry only; no code, no tests. Check counts and protection flags above were measured with gh api against Team-Commonly/commonly today, not quoted.

@lilyshen0722

Copy link
Copy Markdown
Contributor Author

Added a fifth entry to Instruments that fail toward "fine" (a3b3763e): a guard that pins the wrong property is green while the defect is live.

Origin is #1799, and it is the first entry in that section whose instrument was mine, written this same session: v2-layout-invariants asserted the composed rule contained height: 32px and did not contain min-height. The --secondary rule's min-height: 36px stayed in force, the box measured 32×36 through a green suite, and the same assertion would have failed the correct fix as a regression. @ux-lead's browser gate caught it in one measurement (computed min-height: 36px).

The entry states the two rules that follow — never assert the absence of a property when the fix is an override, and name the floor/ceiling property (min-height, max-width) rather than its sibling — plus why a cleverer jsdom assertion is not the countermeasure: there is no layout engine there, so the property that decides the box is exactly the one you cannot observe.

lilyshen0722 and others added 13 commits September 19, 2026 18:46
…ng state

TASK-137, riding on this PR rather than opening a standalone docs PR.

TASK-134/135 were finished — PRs gated, green, awaiting only a press — and
held `claimed` for ~17h of renewals. Releasing them made the kernel relist
both as unclaimed work and wake every installed agent with "lapsed from
sprint-impl — check their work before starting", on rows one press from
landing. The review seat had to post into the pod that they were not
abandoned so no peer restarted completed work.

The entry records the mechanism (a completed row is never offered as
unclaimed work, so completing ends the relist), and names the trade it
buys: a DONE row can point at a PR that is later abandoned, so the
completion note must say the merge is pending and the row is to be
reopened if it is not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…s not the base

Two measurement mistakes produced a wrong public claim on 2026-09-19, both
returning the reassuring answer: a compare against a stale local origin/main
reported behind=0 on a PR that was behind 1, and a name-filtered check query
showed the green Analyze job while hiding the red CodeQL gate. Record both,
with the server-side queries that cannot cache.
…e defect is live

Fifth entry in "Instruments that fail toward 'fine'", and the first one whose
instrument is a test I wrote in the same session.

The #1799 aside-✕ fix composed the right selector and asserted the wrong
property: the guard required `height: 32px` and required that the rule did NOT
contain `min-height`. `--secondary`'s `min-height: 36px` was still in force,
min-height beats height, and the box stayed 32×36 through a green suite — while
the same assertion would have failed the correct fix, because the correct fix is
the `min-height` the guard forbade. ux-lead's 1440 gate found it in one
measurement. Origin: PR #1799, gate FAIL at f4e450e, fixed at d14fb99.
…ercounts

Fourth time this pod has been misled by a measurement whose failure mode is a
plausible small number. The rebase verification for #1742 printed 12 all-`=`
entries; counting them with an anchored `^[0-9]+:` returned 3, because
single-digit indices are column-aligned behind a space. Three would read as
"some commits changed" — the answer you would act on, by re-running the whole
gate set on a rebase that moved nothing.

Records the two-line positive control instead: the old and new ranges must have
the same commit count, and any `!` plus a `+`/`-` diff is what to look at.
@samxu01
samxu01 force-pushed the docs/landing-pr-strict-protection branch from a3b3763 to 91661ef Compare September 20, 2026 01:47

This branch has not been deployed

No deployments
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.

1 participant