diff --git "a/index.html" "b/index.html" --- "a/index.html" +++ "b/index.html" @@ -129,7 +129,7 @@ h1.title .line span{transform:none}.boot div{opacity:1}.step{opacity:1}} .nojs .fade{opacity:1;transform:none}.nojs .boot div{opacity:1}.nojs .step{opacity:1}
GitLab Transcend · Path B · Uptime Kuma 2.5.7
@@ -139,17 +139,24 @@ h1.title .line span{transform:none}.boot div{opacity:1}.step{opacity:1}} and leaves one decision to a human: turning the second key for that exact commit.

The path of one merge requestlive on gitlab.com
01 MERGE REQUESTopened02 EVIDENCEtests · mutation · fuzz03 VERDICTcode, not a model04 SIGNEDin-toto · cosign05 SECOND KEYa human, this commit06 VERIFYevery merge since release07 RELEASEonly if verified08 DEPLOYadmitted image
-
secondkey · prooffrom proof/
001 LOAD POLICY................... v3
002 REPLAY RECORDED EVIDENCE...... 28 MRS
003 SEEDED FAULTS FLAGGED......... 15/16
004 TESTS-PASS RULE STOPPED....... 4/16
005 CLEAN CHANGES SENT TO REVIEW.. 6/12
006 UPSTREAM PRS REPLAYED......... 10
007 ENERGY VS FULL SUITE.......... -86%
008 AGENT SESSIONS ON REAL MRS.... 18
009 WHO TURNS THE KEY............. A HUMAN
+
secondkey · prooffrom proof/
001 LOAD POLICY................... v4
002 REPLAY RECORDED EVIDENCE...... 69 MRS
003 REAL UPSTREAM BUGS FLAGGED.... 17/30
004 TESTS-PASS RULE STOPPED....... 1/30
005 SEEDED FAULTS FLAGGED......... 15/16
006 CLEAN CHANGES SENT TO REVIEW.. 6/12
007 UPSTREAM PRS REPLAYED......... 10
008 ENERGY VS FULL SUITE.......... -86%
009 AGENT SESSIONS ON REAL MRS.... 21
010 WHO TURNS THE KEY............. A HUMAN
-

Live instance ↗ +

Live on Cloud Run ↗ Releases ↗Agent sessions ↗

00 / At a glance
-

Caught what tests
let through

seeded faults Second Key flagged
BLOCK or NEEDS_REVIEW, both live-eval rounds
the usual rule stopped
merge when the MR's own tests pass, same MRs
clean changes sent to review
the price of the catches, shown, not hidden
less CI energy
same 6 commits, risk-proportional vs full suite; 70-73% less carbon
+

Caught what tests
let through

real upstream bugs flagged
fixes Uptime Kuma shipped, undone by a rule sealed before the run
the usual rule stopped
merge when the MR's own tests pass, same MRs
good changes sent to review
the price of the catches, on 20 good changes
less CI energy
same 6 commits, risk-proportional vs full suite; 70-73% less carbon
-
01 / Two rules, same merge requests
+
01 / Thirty real bugs
+

Bugs Uptime Kuma
already fixed

+

Thirty upstream bug fixes from the 2.x line, each undone on main by reverting its code (its regression tests stay), chosen by a rule +that was committed and tagged reintro-sealed before the first merge request. Each went through the live pipeline. +Merge-when-tests-pass stopped 1; Second Key flagged 17, 16 of them with every test green. A reviewer picking changes at random at Second Key's review rate would flag that many with probability 0.012.

+
MRUPSTREAM FIX, UNDONETESTSSECOND KEY
!57fix: Revert "feat(dns): add configurable timeout for DNS monitorpassedREVIEW
!58fix: Domain expiry doesn't seem to update #7189 (#7198)passedREVIEW
!59fix: prometheus metrics have two series for a single monitor whepassedREVIEW
!60fix(discord): timezone with `dayjs.utc()` (#7520)passedGO
!61fix(real-browser): always close browser context (#7820)passedREVIEW
!62fix: reduce rate-limit log spam when quota is healthy (#7599)passedREVIEW
!63fix: Revert back to single SQLite connection by default (#7346)passedREVIEW
!64fix: Revert "add sorting to status pages" (#7194)passedGO
!65fix: allow mqtts:// in MQTT monitor (#7290)passedGO
!66fix(monitor-list): cannot display monitor name in full width (#7passedGO
!67fix: removal of uptime ratio and avg. response time from promethpassedGO
!68fix: show certificate expiry on status page for TCP monitors (#6passedREVIEW
!69fix: monitor graph gaps for sub-millisecond TCP pings (#7159)passedGO
!70fix: move afterCreate to initial mariadb pool config (#7718)passedREVIEW
!71fix: Add bearer token support to WebSocket upgrade monitor (#743passedGO
!72fix(uptime): ensure correct handling of missing time buckets in failedBLOCK
!73fix: double // in badgeUrl breaking Badge generator functionalitpassedGO
!74fix(notification): ensure applyExisting is not saved to databasepassedREVIEW
!75fix: use UptimeCalculator for avg-response badge endpoint (#7886passedREVIEW
!76fix: omit resolver port from DNS monitor service URL (#7516)passedREVIEW
!77fix: Update Home Assistant notification help text for HA 2024 SepassedGO
!78fix: clearing heartbeats on paused monitors leaves them paused (passedGO
!79fix: Remove forced DOWN status in group monitor (#7045)passedGO
!80fix: RSS service status description is wrong (#7641)passedREVIEW
!81fix: accepted status codes custom range discarded on tag creatiopassedGO
!82fix: Add `busy_timeout` to sqlite to avoid error `SQLITE_BUSY: dpassedREVIEW
!83fix(domain-expiry): clarify unsupported RDAP warning (#7588)passedREVIEW
!84fix: isParentActive return type to boolean (#7121)passedREVIEW
!85fix: add timeout functionality to kafka (#7472)passedREVIEW
!86fix: preserve saved protocol when loading Globalping ping monitopassedGO
+ +
02 / Two rules, same merge requests

Judge them twice

16 deliberately broken merge requests and 12 clean ones went through the live pipeline. Switch between the rule most projects use and Second Key's verdict. The usual rule stops 4 of 16 of the broken ones and never bothers a clean change, so it is a fair @@ -159,42 +166,42 @@ baseline; Second Key flags 15 of 16, and its price is review load.

0/12clean changes held up
!3ROUND 1
checkStatusCode upper bound exclusive
GO
tests passed: merged
!4ROUND 1
flatStatus maps MAINTENANCE to DOWN
GO
tests passed: merged
!5ROUND 1
number <= operator becomes <
BLOCK
tests failed
!6ROUND 1
evaluator swaps AND and OR
BLOCK
tests failed
!7ROUND 1
system-service check builds a shell command
GO
tests passed: merged
!8ROUND 1
status page preload loses script-context escaping
GO
tests passed: merged
!9ROUND 1
deleteMonitor handler without checkLogin
GO
tests passed: merged
!10ROUND 1
fake GitLab token committed in config
GO
tests passed: merged
!11ROUND 1
uptime-calculator test loses assertions
GO
tests passed: merged
!12ROUND 1
parseTimeObject reads hours as minutes
GO
tests passed: merged
!13ROUND 1
certificate hostname check always passes
BLOCK
tests failed
!14ROUND 1
retry delay says 30 seconds, code waits 30 minutes
GO
tests passed: merged
!15ROUND 1
document the push route query parameters
GO
!16ROUND 1
clarify the numeric operator comment
GO
!17ROUND 1
README wording fix
GO
!18ROUND 1
unit test for checkStatusCode
GO
!19ROUND 1
rename a local variable in the push route
GO
!20ROUND 1
JSDoc for flatStatus
GO
!34ROUND 2
PENDING to DOWN no longer notifies
GO
tests passed: merged
!35ROUND 2
JSON query == compares with !=
BLOCK
tests failed
!36ROUND 2
condition groups always use AND
GO
tests passed: merged
!37ROUND 2
/metrics served without apiAuth
GO
tests passed: merged
!38ROUND 2
clarify a comment in the DNS monitor
GO
!39ROUND 2
unit test for isImportantForNotification
GO
!40ROUND 2
name the default push message
GO
!41ROUND 2
CONTRIBUTING wording fix
GO
!42ROUND 2
slightly wider button padding
GO
!43ROUND 2
normalise the status page slug in one expression
GO
-
02 / Where the line is drawn
+
03 / Where the line is drawn

The threshold
is a choice

The current policy replayed on the 28 recorded MRs at every GO threshold. Blockers do not depend on it; the curves show what the score buys. These MRs calibrated the policy once, so this describes the trade-off rather than testing it.

seeded faults flaggedclean changes passed
0%50%100%01224364860GO threshold (score)today: GO ≤ 24GO ≤ 0: 16 of 16GO ≤ 6: 16 of 16GO ≤ 12: 16 of 16GO ≤ 18: 16 of 16GO ≤ 24: 16 of 16GO ≤ 30: 13 of 16GO ≤ 36: 12 of 16GO ≤ 42: 11 of 16GO ≤ 48: 10 of 16GO ≤ 54: 8 of 16GO ≤ 60: 8 of 16GO ≤ 0: 0 of 12GO ≤ 6: 4 of 12GO ≤ 12: 4 of 12GO ≤ 18: 6 of 12GO ≤ 24: 6 of 12GO ≤ 30: 7 of 12GO ≤ 36: 9 of 12GO ≤ 42: 10 of 12GO ≤ 48: 11 of 12GO ≤ 54: 12 of 12GO ≤ 60: 12 of 12
-
03 / Real pull requests
+
04 / Real pull requests

Uptime Kuma's own
history

Every held-out upstream PR that applies to 2.5.7 was replayed through the live pipeline; whether it was later reverted or fixed was hidden from the gate. On the sealed held-out backtest (history and diff signals only) it flagged 1 of 4 later-bad PRs and sent 113 of 229 good ones to review.

MRUPSTREAM PRLATERVERDICTSCORE
!23#6736later reverted or fixedREVIEW25
!24#6990later reverted or fixedREVIEW40
!25#7950fineGO19
!26#7911fineGO11
!27#7285fineGO18
!28#7844fineGO5
!29#7856fineREVIEW25
!30#7864fineGO11
!31#7026fineGO10
!32#7846fineREVIEW50
-
04 / The second key
+
05 / The second key

Agents check.
A human decides.

-

Six steps, all running on gitlab.com. Agents read, explain and propose; the verdict is code; the key is a person's note naming the commit. -Anyone can start a flow, so a flow's approval never counts as the key.

-
01
MR OPENED

Evidence runs in CI: only the tests the change can reach, mutation, fuzzing, scans.

02
VERDICT

Deterministic code reads the evidence: GO, NEEDS_REVIEW or BLOCK, signed for this commit.

03
EXPLAINED

A Duo flow writes the Evidence Note and asks the maintainer. It cannot change the verdict.

04
THE KEY

A key holder turns the second key for exactly this commit.

05
VERIFIED

On merge, every merge since the last release is re-verified: signature, diff, key.

06
RELEASED

Only then a release, and a deploy of the image that pipeline signed.

+

Six steps, on gitlab.com and Google Cloud. Agents read, explain and propose fixes; the verdict is code; the key is a person's note naming the commit. +On !87 the gate blocked a removed login check, the flow opened !88 restoring that line, and the same gate gave the fix GO.

+
01
MR OPENED

Evidence runs in CI: only the tests the change can reach, mutation, fuzzing, scans.

02
VERDICT

Deterministic code reads the evidence: GO, NEEDS_REVIEW or BLOCK, signed for this commit.

03
EXPLAINED

A Duo flow writes the Evidence Note. On BLOCK it files the issue and opens a fix MR, judged by the same gate.

04
THE KEY

A key holder turns the second key for exactly this commit, after its evidence is signed.

05
VERIFIED

On merge, every merge since the last release is re-verified: signature, diff, key.

06
ROLLED OUT

Cloud Run: 5%, 25%, 100%, each step held only inside the SLO; a breach restores the recorded revision.

-
05 / Energy
+
06 / Energy

Only the evidence
the change needs

The same six commits run twice: risk-proportional evidence (blue) and the full suite (grey), measured per job with Eco CI. -491.3 J against 3468.72 J, the same decisions.

+491.3 J against 3468.72 J.

07-dns-comment
!38 vs !44
65.78 J
572.85 J
08-notification-test
!39 vs !45
18.55 J
604.75 J
09-push-default-message
!40 vs !46
151.49 J
526.23 J
10-contributing-wording
!41 vs !47
9.15 J
609.65 J
11-button-padding
!42 vs !48
111.96 J
503.17 J
12-status-page-router-slug
!43 vs !49
134.37 J
652.07 J
-
06 / DevSecOps stages
+
07 / DevSecOps stages

9 of 9 stages,
each with a link

-
+
-
07 / What it misses
+
08 / What it misses

Said out loud

    -
  • Clean changes get held up. 6 of 12 clean controls went to review or were blocked; that is the cost of the catches.
  • -
  • The backtest is hard. On Uptime Kuma's held-out history, the history and diff signals alone flagged 1 of 4 later-bad PRs.
  • -
  • The seeds are ours. The seeded faults were written by the people who built the gate; the upstream replays and the backtest are the independent part.
  • -
  • Cloud Run has not run. The 5/25/100 rollout is written; the Google Cloud project is under review, so the public instance runs on Render with the same admission check.
  • +
  • Good changes get held up. 35% of good changes go to review; that is the cost of the catches.
  • +
  • It misses real bugs too. 13 of the 30 undone upstream fixes got GO. Mutation testing on the touched lines carries most of the catches.
  • +
  • The backtest is no better than random. On Uptime Kuma's held-out history, the history and diff signals alone flagged 1 of 4 later-bad PRs at a review load where random review expects about two.
  • +
  • Our agents make mistakes. Two notes a flow wrote stated a value CI never recorded; an audit re-reads every note and lists them.