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

I1967

A reporter that sets a flag is a reporter

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
none
Behind it in all
0
Evidence
1 of 1
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I1967

majordomus plan verify I1967

majordomus plan done I1967

What it is

Objective
Make the pipeline-count guard discover a reporter that records a failure by setting a flag, not only one that increments a counter, so a call to it inside a construct that discards the flag is refused like a lost count.
Why
This is the open half of I1513, filed on PR #548, which was closed on 2026-10-03 when the owner decided it. scripts/lib/counting-functions.awk finds only functions whose body adds one to a variable they did not declare local. scripts/ci/pages-check's `bad() { ...; fail=1; }` records its failure as a flag and is invisible to it, so a call to `bad` inside a `... | while read` loop would set the flag in a subshell, lose it, and let the gate exit 0 while printing the failure. #548's I1513 cannot be reused: its number collides with #292's own I1513, and ADR 0053 forbids recycling a gap.
Now
scripts/lib/counting-functions.awk prints the functions that increment an undeclared variable, and shell-lint refuses a call to one of them inside a pipeline-fed loop (scripts/lib/pipeline-counts.awk, checked against a known-answer fixture first). A function that assigns a constant to an undeclared variable it is not given (`fail=1`, `bad=1`) is not discovered.
Wanted
counting-functions.awk also prints a function whose body assigns a constant to a variable it did not declare local, and shell-lint therefore refuses a call to it inside a pipeline-fed loop, with the file and line. The known-answer fixture carries a flag-setting reporter, and the guard is refused when it does not find it.
Done when
unknown: the record declares no `completion`
Risk
Low. The guard can only refuse shapes that already lose a verdict; a false alarm on a flag nobody reads is answered by naming the reporter it found.

Acceptance

  • A function that sets a flag rather than incrementing a counter is discovered as a reporter
  • A call to such a reporter inside a pipeline-fed loop is refused, with the file and line
  • The known-answer fixture holds a flag-setting reporter, and the guard refuses itself when it does not find it
Validation
bash scripts/ci/shell-lint
Evidence required
a_flag_setting_reporter_is_discovered
Evidence present
a_flag_setting_reporter_is_discovered

Scope

Touches
scripts/lib/counting-functions.awkscripts/ci/shell-linttest/cases
Not
Rewriting gates that are already correct: the guard names what is lost, not what offends tasteA check assembled from another program's output that dies silently, which I1513 named as its third face and test/cases/341 covers on its own
Depends on
none
Priority
p2
Profile
implementation
Parallel safe
true
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-10-04
Updated
2026-10-08T10:34:40Z
Started
2026-10-08T10:33:59Z
Verified
2026-10-08T10:34:35Z
Completed
2026-10-08T10:34:40Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.