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.
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
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.
Deliverynovox/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`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Issue 1936: the merge check re-ran every Go package with a
reads-outsidemarker on every change, because such a package got a random digest and so was never kept.?pathmeans 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.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 vetis clean untagged and with-tags integration,isolation.Reviewed-by: review-reuse@shanks at
488b7bfc58Delivery
novox/mesh-catalog@488b7bfc5816— merged since 2026-10-26T21:18:18ZSource — source.main moved to novox/mesh-catalog@c17ab34a28. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.