A reads-outside marker lists what its tests read, so its package's check is reused until one of those files changes (issue 1936) #513

Merged
mesh-tools merged 4 commits from fix/1936-declared-reads into main 2026-10-26 21:18:14 +00:00
Member

Issue 1936: the merge check re-ran every Go package with a reads-outside marker on every change, because such a package got a random digest and so was never kept.

  • mesh-build-go's digest (DigestVersion 6) reads a marked package's list of repository paths and globs (?path means the tests read that the path is absent). It hashes the lines, the content of every file they match, and every file of the package's own directory, including Go files its build tags exclude.
  • A marker that lists nothing, or whose lines are not clean relative paths, or whose line matches nothing, keeps today's never-kept digest, and the log says why.
  • 46 markers now list what their tests read. checks/deps and checks/trunk lose their markers, because their tests read only temporary directories.

Quick fix (chosen, the operator's yes at 21:56 CET): the lists are written by hand from reading the tests, 1-2 hours of work. Thorough fix (after this, needs a decision under ADR 0445): the test run logs which files it reads, so no list is kept by hand. What covers the risk until then: a review sampled about 25 of the 46 lists against their tests and found the two gaps fixed here (checks/health's own reads, and build-tag-excluded files of a package's own directory).

Tests: one existing test rewritten as a table with extra rows, no new test function; mesh-build-go has 167 unit and 30 integration test functions (budget 500 and 50). go vet is clean untagged and with -tags integration,isolation.

Reviewed-by: review-reuse@shanks at 488b7bfc58

Issue 1936: the merge check re-ran every Go package with a `reads-outside` marker on every change, because such a package got a random digest and so was never kept. - mesh-build-go's digest (DigestVersion 6) reads a marked package's list of repository paths and globs (`?path` means the tests read that the path is absent). It hashes the lines, the content of every file they match, and every file of the package's own directory, including Go files its build tags exclude. - A marker that lists nothing, or whose lines are not clean relative paths, or whose line matches nothing, keeps today's never-kept digest, and the log says why. - 46 markers now list what their tests read. checks/deps and checks/trunk lose their markers, because their tests read only temporary directories. Quick fix (chosen, the operator's yes at 21:56 CET): the lists are written by hand from reading the tests, 1-2 hours of work. Thorough fix (after this, needs a decision under ADR 0445): the test run logs which files it reads, so no list is kept by hand. What covers the risk until then: a review sampled about 25 of the 46 lists against their tests and found the two gaps fixed here (checks/health's own reads, and build-tag-excluded files of a package's own directory). Tests: one existing test rewritten as a table with extra rows, no new test function; mesh-build-go has 167 unit and 30 integration test functions (budget 500 and 50). `go vet` is clean untagged and with `-tags integration,isolation`. Reviewed-by: review-reuse@shanks at 488b7bfc58167ac16286971664cebffb24dd87ba
mesh-tools added 4 commits 2026-10-26 21:15:08 +00:00
47 packages carried the marker and were never kept: about 2000 tests per level ran on every check, whatever it
changed. The marker now lists, as paths or globs from the repository's root (? before a path whose absence is read),
what the package's tests read outside it; the digest hashes those files with the package's own non-Go files. A marker
that lists nothing, names an unclean path, or a line that matches nothing keeps today's never-kept digest.

The 46 markers list their reads; checks/deps and checks/trunk lose theirs (their tests read only temporary
directories). Digest form 6.

Quick fix of issue 1936, chosen by the operator 2026-10-26 21:56; the thorough fix (the Go test log's files kept with
each verdict) stays on the issue.
go list leaves a file its build tags exclude (an integration test) in IgnoredGoFiles, which the digest did not hash;
mesh-provisioner-client's unit test globs *_test.go and reads two of them, so a change there reused a stale unit pass.
Review finding F2 on ba49a7f0.
ReadTreeManifest reads predefined.json and each templated module's templates (WithTemplatesFrom), and the test reads
the root's health-undeclared through Kept: none was listed, so a change to them reused a stale verdict. No other
marker's package reads manifests through ReadTreeManifest beyond what it lists. Review finding F1 on ba49a7f0.
checks/health: its marker names health-undeclared for what it counts (issue 1936)
mesh/delivery merged: source.main moved to novox/mesh-catalog@c17ab34a28cc
mesh/check checking 488b7bfc5816 on c17ab34a28cc
488b7bfc58
Author
Member

Delivery novox/mesh-catalog@488b7bfc5816 — merged since 2026-10-26T21:18:18Z

Source — source.main moved to novox/mesh-catalog@c17ab34a28. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-10-26 21:15 (new) → proposed (announced): novox/mesh-catalog#513's head announced
  • 2026-10-26 21:15 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-10-26 21:18 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@488b7bfc5816` — **merged** since 2026-10-26T21:18:18Z **Source** — source.main moved to novox/mesh-catalog@c17ab34a28cc. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-10-26 21:15 (new) → proposed (announced): novox/mesh-catalog#513's head announced - 2026-10-26 21:15 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-10-26 21:18 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit c17ab34a28 into main 2026-10-26 21:18:14 +00:00
mesh-tools deleted branch fix/1936-declared-reads 2026-10-26 21:18:14 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#513