Skip to content

feat(qa): W29 guards — per-PR self-QA block, config-presence≠functional, read-findings - #33

Merged
CybotTM merged 1 commit into
mainfrom
w29-retro-qa-guards
Jul 18, 2026
Merged

feat(qa): W29 guards — per-PR self-QA block, config-presence≠functional, read-findings#33
CybotTM merged 1 commit into
mainfrom
w29-retro-qa-guards

Conversation

@CybotTM

@CybotTM CybotTM commented Jul 18, 2026

Copy link
Copy Markdown
Member

Three QA guards distilled from a week of Round-1 reviews where the same failure modes recurred. All lessons are generalised — no environment-, customer-, or ticket-specific detail.

Q1 — Self-QA / self-resolve is a per-PR hard blocker

The implementer ≠ reviewer guard must hold for each resolved PR/change, not once at the ticket level. When a ticket bundles several PRs, a reviewer can legitimately QA the PRs they did not author while still owing a second pair of eyes on their own. A PR resolved, approved, or QA-closed by its own author is a blocking (x) that invalidates the QA for that change — "only a quick one" and "already deployed, just closing it out" are not exemptions. Self-resolving on the internal path is the same violation as self-passing to QA2.

Coordination: PR #32 (fix/self-review-team-queue-31) tackles the detection side of the same theme — inferring self-review from authorship rather than the assignee on an unassigned team queue. This PR is complementary (the per-PR granularity + self-resolve-as-blocker angle) and touches the same §E / #17 regions, so the two should be rebased together at merge time.

Q2 — Config presence ≠ functionally proven

A set or grepped config flag, a present setting, or a green healthcheck proves the setting exists, not that the feature works. Exercise the feature end-to-end (fire the webhook with a real payload, render and screenshot the output, confirm the role/flag actually takes effect) and attach that evidence to the ticket. A shadowed or overridden config that still "reports healthy" is its own trap — verify the effective running configuration, not the health endpoint.

Q3 — Two smaller anti-patterns

  • Sharpen QA assignee/bounce/n-a conventions #22 QA findings treated as noise to clear — a verdict with open (!) / (?) items is not "passed". Findings are to be worked, not clicked away; when four of five checks pass, the fifth is the point.
  • chore(release): v0.5.1 #23 Proposing a fix without checking the current state first — verify what already exists (a certificate, a router, a config block may already be in place) before recommending an addition.

Notes

Draft — not for merge; opened for review and coordination with #32.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the peer QA review guidelines, checklist, and anti-patterns. Specifically, it clarifies that the self-review guard applies per resolved PR/change rather than per ticket, introduces a new checklist item (R7) requiring functional proof instead of mere config presence, and adds new anti-patterns regarding treating QA findings as noise and proposing fixes without checking the current state first. There are no review comments, so I have no feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

…al, read-findings

- Self-review guard is per resolved PR/change, not per ticket assignee: on a
  ticket bundling several PRs it holds for each; a PR the implementer
  resolved/approved/QA-closed themselves is a blocking (x) that invalidates that
  change's QA. A self-resolve on the internal path is the same violation as
  self-passing to QA2. (SKILL.md, edge-cases.md §E, anti-pattern #17)
- checklist.md R7 + anti-pattern #21: config presence is not functional proof.
  A set/grepped flag or a green healthcheck shows the setting exists, not that
  the feature works — trigger it end-to-end and attach the evidence. A
  shadowed/overridden config that 'reports healthy' is a false pass; verify the
  effective running config, not the health endpoint.
- anti-patterns #22-#23: QA findings are to be worked, not clicked away (a
  verdict with open (!)/(?) is not passed); check the current state before
  proposing a fix (the cert/router/config may already exist).

Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
@CybotTM
CybotTM force-pushed the w29-retro-qa-guards branch from ede6648 to 42518d6 Compare July 18, 2026 07:13
@CybotTM
CybotTM marked this pull request as ready for review July 18, 2026 07:13
Copilot AI review requested due to automatic review settings July 18, 2026 07:13
@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@CybotTM
CybotTM merged commit 38ee671 into main Jul 18, 2026
6 of 7 checks passed
@CybotTM
CybotTM deleted the w29-retro-qa-guards branch July 18, 2026 07:14
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.

2 participants