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.published-evidence-is-what-ci-recorded@1
A published UI shows the evidence CI recorded, never "not run" for what CI ran
What it is
- URI
majordomus://rule/project.published-evidence-is-what-ci-recorded@1- Kind
rule- Identity
project.published-evidence-is-what-ci-recorded@1- Path
.ai/repo/rules/project/published-evidence-is-what-ci-recorded.v1.md- Provenance
- declared
- Media type
text/markdown- As a capability
- rule.project.published-evidence-is-what-ci-recorded@1
Front matter
{
"id": "project.published-evidence-is-what-ci-recorded",
"version": 1,
"kind": "rule",
"title": "A published UI shows the evidence CI recorded, never \"not run\" for what CI ran",
"description": "The UI a publication carries reads the ledger the validation of the published commit, or of its nearest validated ancestor, recorded; and a publication whose evidence report still holds more not-run claims than the declared baseline is refused rather than published.",
"statement": "Before the UI is read for a publication, put in place the ledger CI recorded for that commit's history; after, refuse to publish when evidence.report counts more `not run` claims than .ai/repo/evidence/published-not-run.txt declares.",
"status": "active",
"class": "blocking",
"depends_on": [
"project.never-reported-is-not-green@1",
"project.ui-derived-state@1"
],
"tags": [
"evidence",
"publication",
"site",
"ui"
],
"x-majordomus": {
"tests": [
"test/cases/3178_the_published_ui_reads_the_evidence_ci_recorded.sh"
]
}
}Content
---
id: project.published-evidence-is-what-ci-recorded
version: 1
kind: rule
title: A published UI shows the evidence CI recorded, never "not run" for what CI ran
description: The UI a publication carries reads the ledger the validation of the published commit, or of its nearest validated ancestor, recorded; and a publication whose evidence report still holds more not-run claims than the declared baseline is refused rather than published.
statement: Before the UI is read for a publication, put in place the ledger CI recorded for that commit's history; after, refuse to publish when evidence.report counts more `not run` claims than .ai/repo/evidence/published-not-run.txt declares.
status: active
class: blocking
depends_on: [project.never-reported-is-not-green@1, project.ui-derived-state@1]
tags: [evidence, publication, site, ui]
x-majordomus:
tests: [test/cases/3178_the_published_ui_reads_the_evidence_ci_recorded.sh]
---
# Rationale
On 2026-10-16 the owner opened https://majordomus.dev/ui/kiosk/ and saw a cloud of "not run".
The snapshot published there had counted 154 test claims as never run. The validation of the
same commit had run every one of them, and its `evidence` artifact held 606 recorded
executions.
The Pages runner read the tracked ledger, `.ai/repo/evidence/ledger.json`. That ledger holds
fourteen local runs, last changed on 2026-10-03, because the recording branch that would carry
CI's runs into it (ADR 0080, I1954) is not built. Every test without a row there reads
`not run`.
"Not run" is the one evidence state that is a statement about the past. It says nobody ran
this. Publishing it for a test CI ran is a false statement on the page the project shows the
world, not merely a stale one.
Measured over the artifact of master d116266803:
| ledger | proven | not run |
|---|---|---|
| tracked only | 0 | 214 |
| the run's | 235 | 0 |
# Required behaviour
- The Pages workflow's UI snapshot job runs `scripts/pages evidence --ledger-out
.ai/repo/evidence/ledger.json` before the UI is read.
- It uses the artifact of the published commit or its nearest validated ancestor. Its
manifest must name a commit in the published history, or nothing is copied.
- A row of an ancestor is judged by the one freshness function at the published commit, so
it reads stale or inputs unchanged, never as a run of this commit.
- It then runs `scripts/pages published-evidence --bin <the executable that reads the UI>`.
This asks evidence.report, the capability the screens ask, in the same checkout. It refuses
with exit 10 when `not run` exceeds the declared baseline.
- The baseline, `.ai/repo/evidence/published-not-run.txt`, is a single count. It may only fall.
- When the recording branch lands (I1954), the tracked ledger carries CI's runs itself. The
overlay then has nothing to add, and the check keeps holding the same line.
# Failure behaviour
- An artifact outside the published history, or one with no ledger, copies nothing and says
why. The check then refuses what the tracked ledger alone would publish.
- A report that cannot be read, or a baseline that holds no count, exits 12. It is never read
as a pass.
# Verification
`test/cases/3178_the_published_ui_reads_the_evidence_ci_recorded.sh` drives both commands
through the real script against this repository's history. It covers:
- the ledger put in place;
- the ledger refused for a commit outside the history;
- the ledger refused when the artifact carries none;
- the check passing within the baseline and refusing over it;
- the check exiting 12 on an unreadable report and on an empty or absent baseline.