Skip to content

Give five contexts a verdict and re-read the trigger walk where it stopped reproducing - #220

Merged
iderex merged 2 commits into
mainfrom
parity/verdicts-for-five-declared-names-and-a-reading-that-stopped-reproducing
Aug 29, 2026
Merged

Give five contexts a verdict and re-read the trigger walk where it stopped reproducing#220
iderex merged 2 commits into
mainfrom
parity/verdicts-for-five-declared-names-and-a-reading-that-stopped-reproducing

Conversation

@iderex

@iderex iderex commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Two documents-only changes to docs/quality-parity.md, on one branch and one
pull request because both land prose in the same file and separate landings
would move the mainline under each other.

What I found, and how

#26: five declared check names had no verdict in the document

The done-condition of #26 assembles the required set from this document. A
comment on that issue recorded that every check name this tree declares carried
a verdict there, evidenced by a sweep whose only output was the six build
entries. I re-ran that sweep at 9208ceb599a294328bde3d8b660c65a5fd3c5fb5
before writing anything, and it prints ten:

git show 9208ceb599a294328bde3d8b660c65a5fd3c5fb5:internal/contexts/contexts.go \
  | grep -oE 'Name: +"[^"]+"' | sed 's/Name: *"//; s/"$//' | sort -u \
  | while read -r n; do
      git grep -q -F "$n" 9208ceb599a294328bde3d8b660c65a5fd3c5fb5 \
        -- docs/quality-parity.md || echo "no literal: $n"
    done
no literal: build (darwin/amd64)
no literal: build (darwin/arm64)
no literal: build (linux/amd64)
no literal: build (linux/arm64)
no literal: build (windows/amd64)
no literal: build (windows/arm64)
no literal: smoke (darwin/arm64)
no literal: smoke (linux/amd64)
no literal: smoke (windows/amd64)
no literal: verify the published artefacts

The six build entries are the deliberate absence the build row already
covers through docs/decisions/0012-the-supported-platforms.md. The other four
are a gap. A fifth, release, is a gap the sweep cannot show: the word matches
inside the reason on the SBOM row, and a fixed-string comparison cannot tell
that from a verdict.

All five read a tag or a published release, so they arrive on no pull request
and requiring one would hold every merge open for a tick that is not coming,
which is what required-context-nothing-reports refuses. The paragraph I added
drops them permanently rather than until #26, in the terms the table uses, and
says what dropping them from the gate does not drop: the smoke jobs are the only
thing here that reads what an operator downloads rather than the source it was
built from.

internal/contexts/contexts.go already carries all five as absences, four of
them under the shared neverOnAPullRequest reason, so the tree and the document
now agree instead of only the tree holding the answer.

#62: two of the five pastes in the trigger walk had stopped reproducing

The section that reads which contexts arrive discloses that its readings were
made at 1fc6961, and its commands resolve origin/main. Two of them no longer
return what is pasted beside them. Read at
9208ceb599a294328bde3d8b660c65a5fd3c5fb5:

git grep -L 'branches: \[ *"\*\*" *\]' origin/main -- .github/workflows/
origin/main:.github/workflows/dco.yml
origin/main:.github/workflows/dependency-review.yml
origin/main:.github/workflows/release.yml
origin/main:.github/workflows/scorecard.yml
origin/main:.github/workflows/smoke.yml

git grep -n 'types:' origin/main -- .github/workflows/
origin/main:.github/workflows/dco.yml:13:    types: [opened, synchronize, reopened]
origin/main:.github/workflows/smoke.yml:41:    types: [published]

Three files where the document says three, and two type filters where it says
one. Both differences are the same cause: this board gained release.yml and
smoke.yml, and neither runs on a pull request.

I re-ran the other three pastes in that section as well. The path-filter grep,
the branch grep over dependency-review.yml and the if: count all reproduce
unchanged, and the new prose names them as such rather than leaving a reader to
re-derive them.

The repair is more than fresh output. A grep for files carrying no
every-branch filter gains a member every time this board adds a tag-triggered or
release-triggered workflow, and those members answer nothing the section asks.
The new prose separates the two kinds of member and says the thing worth reading
for is a file that does run on a pull request appearing in the list.

What this does not do

Neither issue closes. #26 waits on the ruleset edit that adds the required set,
which is a repository setting rather than anything a change to this tree
reaches; #62 waits on that set existing to compare against, and on a pull
request opened from a fork. Both reasons are already written on those issues and
I have not repeated them there.

Nothing here measures a fork route, opens a licence file, or says what any job
found. The five names this change gives a verdict to are dropped from a required
set that does not exist yet, so the verdict is a statement about what may join
it rather than about anything holding a merge today.

The gate, run at the head of this branch

go build ./cmd/... ./internal/...
go vet ./cmd/... ./internal/...
gofmt -l cmd internal
(no output)
go test -count=1 ./cmd/... ./internal/...
ok  github.com/Flowfin/lab/cmd/bom
ok  github.com/Flowfin/lab/cmd/contexts
ok  github.com/Flowfin/lab/cmd/lab
ok  github.com/Flowfin/lab/cmd/notices
ok  github.com/Flowfin/lab/cmd/pullrequest
ok  github.com/Flowfin/lab/internal/bom
ok  github.com/Flowfin/lab/internal/check
ok  github.com/Flowfin/lab/internal/contexts
ok  github.com/Flowfin/lab/internal/hardware
ok  github.com/Flowfin/lab/internal/invariants
ok  github.com/Flowfin/lab/internal/notices
ok  github.com/Flowfin/lab/internal/prose
ok  github.com/Flowfin/lab/internal/pullrequest

go run ./cmd/lab check .
examined .
1 experiment directory walked, 1 record read
27 decision records read
0 refused

The timings are dropped from the suite output and nothing else is changed. The
run above was made with -count=1 and the -v run that carries the
integration-hardware disclosure was made separately and passed; that harness was
not asked for and asking for it needs the hardware it names.

Means

Prose in the parity document rather than a new file or a new check. What was
missing in both halves is a verdict and a reading a person uses when assembling
a required set by hand, internal/contexts already holds the machine-readable
half of the first, and a list of workflow files written into a document would
drift against the directory that decides it.

Reading

No second reader on this board tonight, so this body carries the evidence in
place of one: every command above was run before the sentence beside it was
written, and each paste names the commit it was read at.

Refs #26
Refs #62

iderex added 2 commits August 29, 2026 19:42
The document is where issue #26 assembles the required set from, and a check
name it gives no verdict to can be read as kept or as dropped with equal
justice, so two readings produce two gates. A comment on that issue recorded
that every declared name carried a verdict and evidenced it with a sweep whose
only output was the six build entries. Re-run at 9208ceb, that sweep prints ten,
and four of the new ones are a gap rather than the deliberate absence the build
row covers: the three smoke entries and the smoke workflow's verify job. A fifth,
release, the sweep cannot see at all, because the word matches inside the reason
on another row and a fixed-string comparison cannot tell that from a verdict.

All five read a tag or a published release, which a pull request has neither of,
so they arrive on nothing a merge waits for. Requiring one would hold every
merge open for a tick that is not coming, which is what
required-context-nothing-reports refuses, so they are dropped permanently rather
than until #26 and this document now says so in the same terms the table uses.

What it prevents is the gate being assembled from a document that gives five of
the names it is assembled from no answer, and the smoke jobs are the ones where
reading it wrong costs most: they are the only check here that reads what an
operator downloads rather than the source it was built from, so a reader who
took them for droppable would drop the rule along with the tick. The paragraph
separates the two.

The means is prose in the existing parity document rather than a new file or a
check, because what was missing is a verdict a person reads when assembling a
required set by hand, and internal/contexts already holds the machine-readable
half and already agrees with these five.

Both pasted commands were run at the commit they name before the paragraph was
written. The sweep is pinned to 9208ceb rather than to origin/main because this
change is what moves its output.

Refs #26

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
…duce

Two of the five pastes in the section that reads which contexts arrive had
stopped reproducing. The branch-filter grep names three files and returns five;
the type-filter grep names one line and returns two. Both moved for the same
reason, which is that this board gained the release and smoke workflows since
the reading was made, and neither of those runs on a pull request at all.

The section already disclosed the commit it was read at, so nothing here was
hidden. What was wrong is that the commands beside the pastes resolve
origin/main, so a reader who ran one got an output the document did not carry
and had no way to tell a workflow that narrows a pull request from one that runs
on none. That is the failure this repair prevents: the section exists to find a
context arriving on some pull requests and not on others, and a grep whose
membership grows with every tag-triggered workflow buries that signal under
files the question does not apply to. The new prose says which of the two a
member is and what a reader should look for.

Every paste was re-run before the sentence beside it was written, and the three
that reproduce unchanged are named as such rather than left for a reader to
re-derive.

The means is prose in the document the issue names as the place for the result,
and the readings stay commands a reader re-runs rather than a table, because a
list of workflow files here would drift against the directory that decides it.

Refs #62

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
@iderex iderex added documentation Improvements or additions to documentation ci labels Aug 29, 2026
@iderex iderex self-assigned this Aug 29, 2026
@iderex
iderex merged commit bc32ccd into main Aug 29, 2026
25 checks passed
@iderex
iderex deleted the parity/verdicts-for-five-declared-names-and-a-reading-that-stopped-reproducing branch August 29, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant