Context
Surfaced by Euclid's (@neo-gpt, cross-family) review-deferral on PR #14210 (2026-06-27 07:27) during the live cross-family-review experiment (operator asked Euclid to /pr-review all open PRs). Euclid: "full CI missing on stacked read-path head." This is a process/workflow friction→gold, not a code bug.
The Problem
A stacked PR — base = another feature-branch, not dev — runs only the lint checks (lint-pr-body, lint-pr-review-body). The full CI (unit, integration-unified, CodeQL, check) is gated on a dev base, so a stacked head never gets it. Consequence: a stacked slice has no full CI to validate against, so the cross-family merge-gate review (ADR-0019) cannot proceed — a rigorous reviewer correctly defers.
Same-family reviewers can (and did) APPROVE a stacked slice on code-correctness (#14210 carried Ada + Vega approvals) without gating on CI-completeness; the cross-family reviewer held the stricter merge-readiness bar. So the gap silently lets same-family approval stand in for a gate the cross-family reviewer can't actually clear yet.
Verified (V-B-A):
gh pr checks 14210 (base ada/14206-singlesource-write) → only lint-pr-body + lint-pr-review-body green; no unit/integration.
gh pr checks 14202 (base dev) → full CI green (unit, integration-unified, CodeQL, check).
The Architectural Reality
The CI workflows (.github/workflows/*) gate the full-CI jobs on a dev target. Stacked / slice-based work is now common (the #14193 de-dup slices #14202 → #14207 → #14210, the lease-extract slices, etc.), so this recurs every time a slice awaits cross-family review while still stacked. The cross-family gate (ADR-0019, correlated-blind-spot defense) requires full CI to validate against.
The Fix (converge in review)
Option A — workflow NORM (recommended, KISS): same-family code review happens while stacked; the cross-family merge-gate review happens after the slice rebases onto dev (full CI on a non-stacked head). The stack merges bottom-up, with cross-family review at each dev-rebase. Encode the sequencing in the pull-request + pr-review skills (request cross-family review post-rebase; a reviewer seeing a stacked lint-only head defers + requests the rebase). Cheap, no extra CI minutes.
Option B — run full CI on stacked heads too: a CI-config change so stacked PRs get the full suite. Costs CI-minutes on intermediate heads that aren't merging yet.
Recommendation: A. Intermediate stacked heads don't need full CI — only the about-to-merge dev-rebased head does. A is a discipline/doc change; B spends CI on throwaway intermediate states.
Decision Record impact
aligned-with ADR-0019 (cross-family review gate / correlated-blind-spot defense). Closes a workflow gap that currently lets the gate be bypassed for stacked work; does not amend or challenge the ADR.
Acceptance Criteria
Out of Scope
- The de-dup stack's actual bottom-up merge (that's #14193 execution, not this norm).
- Changing the full-CI dev-gate for ordinary (non-stacked) PRs.
Avoided Traps
- Don't run full CI on every intermediate stacked head reflexively (Option B's cost) — only the merge-candidate dev-rebased head needs it.
- Don't let same-family approval substitute for the cross-family gate on stacked work — the gate genuinely can't clear without full CI; the deferral is correct rigor, not friction to route around.
Related
- #14210 (the deferral instance), #14193 / #14079 (the de-dup stack that exposed it), ADR-0019 (cross-family review gate).
Live latest-open sweep: checked latest 20 open issues at 2026-06-27 ~07:33; no equivalent found.
Origin Session ID: 090a68e6-1a28-4b20-a5fd-842ebac3e729
Retrieval Hint: "stacked PR lint-only CI cross-family review deferral" / "review-after-rebase norm"
Context
Surfaced by Euclid's (@neo-gpt, cross-family) review-deferral on PR #14210 (2026-06-27 07:27) during the live cross-family-review experiment (operator asked Euclid to
/pr-reviewall open PRs). Euclid: "full CI missing on stacked read-path head." This is a process/workflow friction→gold, not a code bug.The Problem
A stacked PR — base = another feature-branch, not
dev— runs only the lint checks (lint-pr-body,lint-pr-review-body). The full CI (unit,integration-unified,CodeQL,check) is gated on adevbase, so a stacked head never gets it. Consequence: a stacked slice has no full CI to validate against, so the cross-family merge-gate review (ADR-0019) cannot proceed — a rigorous reviewer correctly defers.Same-family reviewers can (and did) APPROVE a stacked slice on code-correctness (#14210 carried Ada + Vega approvals) without gating on CI-completeness; the cross-family reviewer held the stricter merge-readiness bar. So the gap silently lets same-family approval stand in for a gate the cross-family reviewer can't actually clear yet.
Verified (V-B-A):
gh pr checks 14210(baseada/14206-singlesource-write) → onlylint-pr-body+lint-pr-review-bodygreen; no unit/integration.gh pr checks 14202(basedev) → full CI green (unit,integration-unified,CodeQL,check).The Architectural Reality
The CI workflows (
.github/workflows/*) gate the full-CI jobs on adevtarget. Stacked / slice-based work is now common (the #14193 de-dup slices #14202 → #14207 → #14210, the lease-extract slices, etc.), so this recurs every time a slice awaits cross-family review while still stacked. The cross-family gate (ADR-0019, correlated-blind-spot defense) requires full CI to validate against.The Fix (converge in review)
Option A — workflow NORM (recommended, KISS): same-family code review happens while stacked; the cross-family merge-gate review happens after the slice rebases onto
dev(full CI on a non-stacked head). The stack merges bottom-up, with cross-family review at each dev-rebase. Encode the sequencing in thepull-request+pr-reviewskills (request cross-family review post-rebase; a reviewer seeing a stacked lint-only head defers + requests the rebase). Cheap, no extra CI minutes.Option B — run full CI on stacked heads too: a CI-config change so stacked PRs get the full suite. Costs CI-minutes on intermediate heads that aren't merging yet.
Recommendation: A. Intermediate stacked heads don't need full CI — only the about-to-merge dev-rebased head does. A is a discipline/doc change; B spends CI on throwaway intermediate states.
Decision Record impact
aligned-with ADR-0019(cross-family review gate / correlated-blind-spot defense). Closes a workflow gap that currently lets the gate be bypassed for stacked work; does not amend or challenge the ADR.Acceptance Criteria
pull-request+pr-reviewskills: cross-family merge-gate review is requested after a slice rebases ontodev(a non-stacked, full-CI head), not while stacked.dev) with lint-only CI has a clear protocol: defer + request the author rebase ontodev, rather than approve on partial CI.Out of Scope
Avoided Traps
Related
Live latest-open sweep: checked latest 20 open issues at 2026-06-27 ~07:33; no equivalent found.
Origin Session ID: 090a68e6-1a28-4b20-a5fd-842ebac3e729 Retrieval Hint: "stacked PR lint-only CI cross-family review deferral" / "review-after-rebase norm"