Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

project.never-reported-is-not-green@1

A verdict that never arrived is not a verdict

What it is

URI
majordomus://rule/project.never-reported-is-not-green@1
Kind
rule
Identity
project.never-reported-is-not-green@1
Path
.ai/repo/rules/project/never-reported-is-not-green.v1.md
Provenance
declared
Media type
text/markdown
As a capability
rule.project.never-reported-is-not-green@1

Front matter

{
  "id": "project.never-reported-is-not-green",
  "version": 1,
  "kind": "rule",
  "title": "A verdict that never arrived is not a verdict",
  "description": "A change is judged against the trunk's own failing set, established by reading a run that finished, and never against the absence of a report; a check that has not spoken is unknown, not passing.",
  "statement": "A check that has not reported is unknown, never passing; a change is merged against the trunk's measured failing set, not against silence.",
  "status": "active",
  "class": "advisory",
  "depends_on": [
    "project.land-and-publish@1"
  ],
  "tags": [
    "process",
    "integration",
    "evidence"
  ],
  "x-majordomus": {
    "reviewed_because": "decided by review and by the record, not by a gate — no check can tell that a person believed silence; the nearest mechanical support is that the planner refuses a model whose verdict cannot be reached"
  }
}

Content

---
id: project.never-reported-is-not-green
version: 1
kind: rule
title: A verdict that never arrived is not a verdict
description: A change is judged against the trunk's own failing set, established by reading a run that finished, and never against the absence of a report; a check that has not spoken is unknown, not passing.
statement: A check that has not reported is unknown, never passing; a change is merged against the trunk's measured failing set, not against silence.
status: active
class: advisory
depends_on: [project.land-and-publish@1]
tags: [process, integration, evidence]

x-majordomus:
  reviewed_because: decided by review and by the record, not by a gate — no check can tell that a person believed silence; the nearest mechanical support is that the planner refuses a model whose verdict cannot be reached
---

# Rationale

For a whole night this repository's trunk carried three branch-breaking defects while every
surface a person looks at showed nothing wrong. No validation run had completed: the runs were
queued behind scarce runners, and each new push cancelled the one before it. Nobody was
deceived by a green tick, because there was no green tick — they were deceived by an empty
space where a verdict goes, which reads exactly like one.

The same shape appeared twice more the next day, in different clothes:

- A publication that had **succeeded** reported `cancelled`, because the job's own wait for the
  content delivery network expired before the network caught up. The site was serving the new
  commit a minute later. A worker reading the job's status would have re-run a deploy that had
  already happened; the answer was to ask what the site was actually serving.
- Every pull request open that day showed failing checks, and every one of those failures was
  the trunk's own. A worker comparing against zero would have concluded that all of them were
  broken and that none could land, and the day would have ended with nothing merged and a trunk
  still red.

What these have in common is that the cheap reading — a colour, a status word, a count of
failures — is not the reading that decides. The expensive reading is what a run actually said,
and about which tree.

# Required behaviour

**A check that has not reported is unknown.** Absence is recorded and pursued as absence; it is
never written down, spoken, or merged against as though it had passed. When a run does not
complete, the honest report is that the change is unverified, and it says which check is
missing.

**A change is judged against the trunk's own failing set.** Before merging, establish what the
trunk itself fails — from a run that finished, or by running the gate locally on the trunk —
and compare. Identical or smaller is a change that leaves the trunk no worse, and that is the
bar; strictly zero is not the bar while the trunk is red, because it would freeze every repair
behind every other repair. A failure the change introduces is named and owned before it lands.

**A job's status is not the fact it was measuring.** When a job reports a failure whose subject
is observable — a published site, a running server, a file on disk — ask the subject before
believing the job. A bounded wait that expired is a measurement that did not finish, not a
measurement that came back negative.

**A verdict is arranged to arrive.** A gate whose runner is so scarce that its answer never
comes is documentation, not enforcement; either it is planned so it can complete, or the fact
that it cannot is stated where a reader will meet it.

# Failure behaviour

Decided by review and by the record, not by a gate: no check can tell that a person believed
silence. The nearest mechanical support is that the planner refuses a model whose verdict
cannot be reached, and that the published-site gate asks the site rather than the workflow.

A claim in a report, a pull request or a commit message that something "passes" when no run
finished is the failure this rule names, and it is a correctness failure rather than a matter
of tone: it puts a fact into the record that nothing measured.

# Verification

The planner's own case holds that every gate the model declares is reachable in some plan, so a
gate cannot be declared into a job that never runs. Everything else here is held by review.