nightjar

Evidence

A real run on 26 Oct 2026 (all times UTC). Every link is a real artifact of the GitLab project.

15:48
change
A "cleanup" merge request removes a strip(). Review and CI pass. The gate asks a human because there is no new test. MR !2
15:55:31 UTC
probe red
Scheduled probe fails in production: a coupon pasted with a trailing space gets HTTP 422. scheduled pipeline
15:56:48 UTC
rollback
Rollback to the previous Cloud Run revision, incident opened and assigned to Duo. incident #3
15:59:13 UTC
fix opened
Duo Developer Flow opens the fix with a regression test. MR !3
16:02:48 UTC
gate
Proof (red before, green after), scans, risk gate: score 16, auto-merge. gate comment in MR !3
16:09:16 UTC
released
Staging revision, smoke test, promotion, release, postmortem. release pipeline

Time to mitigate 1 min 17 s. Time to fix 13 min 45 s. Humans woken up: 0. The postmortem with these numbers was written by the pipeline into incident #3.

The case where the gate does not merge

Issue #4 asks for Swiss customers; the fix needs a VAT rate in app/tax_rates.py, which Finance owns in CODEOWNERS. Duo's MR !4 has a proven regression test and a score of 24, below the auto-merge limit of 30, but the gate does not merge it: it labels it risk::human-approval and requests a reviewer. It stays open until Finance approves.

Risk gate comment on merge request 4: human approval required, protected path app/tax_rates.py, score 24
MR !4: tax rates belong to Finance, so a human has to approve.

Requesting the reviewer also starts a custom Duo flow, Nightjar Approval Brief, which posts a read-only decision brief for the code owner.

Full pipeline history