From 1573bb5937f96c6bb54fa43bd9278977a92b6ca2 Mon Sep 17 00:00:00 2001 From: Maria Carter Date: Sun, 2 Aug 2026 16:15:49 +0200 Subject: [PATCH] docs: warn that describing the skip-ci token in a commit message suppresses CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GitHub scans the whole commit message, not just the subject, so a commit that merely explains the wave technique matches its own skip marker and suppresses every workflow on the resulting PR. This already happened once: the commit that added fleet-operations.md described the pattern in its body, and PR #29 came back with zero check runs. That failure mode is nastier than a red check — absent checks look identical to checks that have not started yet, so the PR reads as healthy and an admin merge would sail through unvalidated. Recorded next to the wave procedure, since that is the context in which someone will next be tempted to write the token in prose. --- docs/fleet-operations.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/fleet-operations.md b/docs/fleet-operations.md index 3387fa1..5b274cd 100644 --- a/docs/fleet-operations.md +++ b/docs/fleet-operations.md @@ -49,6 +49,14 @@ byte-identical everywhere does not. `[skip ci]` suppresses workflow triggers but **not** GitHub's own "Dependabot Updates" scheduler — seeing one of those fire after a wave is expected and benign. +> **Never write the literal token in a commit message that is not itself a wave.** GitHub scans the +> **whole** commit message, not just the subject line, so a commit that merely *describes* the +> technique suppresses its own CI. This bit the commit that first added this document: it explained +> the wave pattern in its body, and the resulting PR came back with **zero check runs** — not failed, +> not queued, simply absent, which reads exactly like a healthy PR whose checks have not started yet. +> Write it as `skip-ci` in prose, and if a PR ever reports no checks at all, grep the commit message +> before looking anywhere else. + ### Execution shape One atomic commit per branch via the Git Data API (blobs → tree → commit → ref patch), not one