relay's doc-pages job finally ran at 19:03 — and it clones e2e main at
job runtime, which by then had the new source
So a pipeline that would have passed when it was created failed when it ran.
🔴 The window cannot be closed by ordering alone
The guard compares the relay's recorded hash against e2e main. A regenerated
page can only match after the source is on e2e main. So between "source
lands" and "regeneration lands" the relay's main is genuinely red, and that is
the guard telling the truth.
Landing the regeneration promptly keeps it short. #6 makes it long: 23 minutes of
queue turned a two-minute window into most of an hour.
What NOT to do
⚠️allow_failure: true on main, or skipping the job there. That converts a true
red into a green that means nothing — the same pattern removed from the Android
suite today (paulhitt/flamenet-messenger-android#4, 18 tests reporting PASSED
while running nothing). The guard exists because a stale page stayed served for a
day; weakening it to avoid an honest red would undo the whole point.
Options worth weighing
Write the ordering rule down in CONTRIBUTING.md, next to the tracking
convention: a doc source and its regenerated page live in different
repositories, so land the regeneration immediately after the source and expect
main to be red in between. Cheapest, and honest.
Record the e2e commit in the banner as well as the content hash, so the
failure can say "source moved 3 commits ago" rather than only "hashes differ".
Better diagnostics, same red.
Fix#6, which is what makes the window long enough to notice.
Done when
The rule is written down where somebody will meet it
A cross-repo doc change can be landed without anyone rediscovering this
`main` went red at `0daa4225`, correctly:
```
doc-pages FAILED
self-hosting.leaf from flamenet-e2e/SELF-HOSTING.md (a4ed8fd6… != 0f36788a…)
```
The page really was stale. But the sequence that produced it is structural, not a
mistake anyone made twice:
1. relay!7 merged 18:20; its pipeline queued behind #6
2. flamenet-e2e!4 merged ~18:55, changing `SELF-HOSTING.md`
3. relay's `doc-pages` job finally ran at 19:03 — and it **clones e2e `main` at
job runtime**, which by then had the new source
So a pipeline that would have passed when it was created failed when it ran.
### 🔴 The window cannot be closed by ordering alone
The guard compares the relay's recorded hash against e2e `main`. A regenerated
page can only match **after** the source is on e2e main. So between "source
lands" and "regeneration lands" the relay's main is genuinely red, and that is
the guard telling the truth.
Landing the regeneration promptly keeps it short. #6 makes it long: 23 minutes of
queue turned a two-minute window into most of an hour.
### What NOT to do
⚠️ `allow_failure: true` on main, or skipping the job there. That converts a true
red into a green that means nothing — the same pattern removed from the Android
suite today (paulhitt/flamenet-messenger-android#4, 18 tests reporting PASSED
while running nothing). The guard exists because a stale page stayed served for a
day; weakening it to avoid an honest red would undo the whole point.
### Options worth weighing
- **Write the ordering rule down** in `CONTRIBUTING.md`, next to the tracking
convention: a doc source and its regenerated page live in different
repositories, so land the regeneration immediately after the source and expect
main to be red in between. Cheapest, and honest.
- **Record the e2e commit** in the banner as well as the content hash, so the
failure can say "source moved 3 commits ago" rather than only "hashes differ".
Better diagnostics, same red.
- **Fix #6**, which is what makes the window long enough to notice.
### Done when
- [ ] The rule is written down where somebody will meet it
- [ ] A cross-repo doc change can be landed without anyone rediscovering this
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
mainwent red at0daa4225, correctly:The page really was stale. But the sequence that produced it is structural, not a
mistake anyone made twice:
SELF-HOSTING.mddoc-pagesjob finally ran at 19:03 — and it clones e2emainatjob runtime, which by then had the new source
So a pipeline that would have passed when it was created failed when it ran.
🔴 The window cannot be closed by ordering alone
The guard compares the relay's recorded hash against e2e
main. A regeneratedpage can only match after the source is on e2e main. So between "source
lands" and "regeneration lands" the relay's main is genuinely red, and that is
the guard telling the truth.
Landing the regeneration promptly keeps it short. #6 makes it long: 23 minutes of
queue turned a two-minute window into most of an hour.
What NOT to do
⚠️
allow_failure: trueon main, or skipping the job there. That converts a truered into a green that means nothing — the same pattern removed from the Android
suite today (paulhitt/flamenet-messenger-android#4, 18 tests reporting PASSED
while running nothing). The guard exists because a stale page stayed served for a
day; weakening it to avoid an honest red would undo the whole point.
Options worth weighing
CONTRIBUTING.md, next to the trackingconvention: a doc source and its regenerated page live in different
repositories, so land the regeneration immediately after the source and expect
main to be red in between. Cheapest, and honest.
failure can say "source moved 3 commits ago" rather than only "hashes differ".
Better diagnostics, same red.
Done when
mentioned in merge request !9
mentioned in commit
4d34a15cdc