Repository navigation
The core twins name the guard that enforces them; shape 7's worst form is written down (#3345) - #3346
Conversation
… form is written down #3345 was filed here as a core regression — "a disposing owner stops answering its waiter" — and bisected across five commits of #3291 before the premise fell over. There is no regression. NackReachesTheWaiterDuringTeardownTest and LateNackReenqueueTest exist in BOTH repos on purpose (core's CI cannot stand up a monolith mesh), #3291 rewrote this side's copies to the no-forced-teardown contract, and the Plugins copies were left asserting the contract it had just deleted. Bisect, with the Plugins test project held constant and only MeshWeaverRoot varying: 6163dfa 2/2 pass → f92305a 0/2 fail. One commit; one clause, `|| owner.IsShuttingDown` on the parked turn's SpinUntil. What failed was the control. The twins were held together by a comment — and it sat on THIS side only, i.e. on the copy whose editor already knew. The party who needed it was whoever edited the Plugins copy. The enforcing guard has to live in the dependent, because that is the only side that can see both files (it builds against $(MeshWeaverRoot) at MW_PLATFORM_REF): Systemorph/MeshWeaver.Plugins#1359 adds TeardownTwinParityTest, which compares each body below the namespace line against the core checkout AT THE PIN, never main — so it reddens in the pin bump, the change that owes the update, and is silent in every change that does not. A missing platform checkout fails rather than skips. This change is the half that belongs here: - both twins now carry the marker pointing AT that guard, so a core editor learns the change is not done until the Plugins copy carries it too. The block sits above the namespace, which is exactly what the guard excludes — verified by running the guard against this worktree: 4/4. - CrossRepoPairGate gains "Shape 7's worst form: the dependent holds a COPY of the test", with the incident, why a pinned dependent stays silent until the bump, and the two rules that generalise (a duplicated test needs a parity guard, not a comment; the marker goes on both copies). Verified: DocumentationLinkIntegrityTest passes; MeshWeaver.Graph.Test builds clean under -c Release -warnaserror. Pairs-with: none — docs and comments only; this diff removes no public surface. Refs #3345, #3291 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
🟢 Approval recommended
The diff is limited to comments and documentation updates that accurately reflect the stated incident and enforcement mechanism without changing runtime behavior.
Pull request overview
This PR documents and hardens the “twin test” cross-repo maintenance contract that caused issue #3345: two teardown tests exist in both core and MeshWeaver.Plugins, and a one-sided comment was not sufficient to keep the copies in sync.
Changes:
- Add an explicit “editing this file?” marker to both core twin tests, pointing to the enforcing guard (
TeardownTwinParityTest) in the dependent repo. - Extend
CrossRepoPairGate.mdwith a new “Shape 7’s worst form” section that captures the incident pattern and the generalized rules (guard > comment; marker on both copies).
File summaries
| File | Description |
|---|---|
| test/MeshWeaver.Graph.Test/NackReachesTheWaiterDuringTeardownTest.cs | Adds a prominent marker comment explaining twin parity enforcement and where the real guard lives. |
| test/MeshWeaver.Graph.Test/LateNackReenqueueTest.cs | Adds the same marker comment to the second twin to keep cross-repo maintenance symmetric. |
| src/MeshWeaver.Documentation/Data/Architecture/CrossRepoPairGate.md | Documents “Shape 7’s worst form” (duplicated tests across repos) and names the concrete control (TeardownTwinParityTest). |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Test Results (shard 0)251 tests 251 ✅ 1m 45s ⏱️ Results for commit 541e24c. |
Test Results (shard 3)369 tests 367 ✅ 46s ⏱️ Results for commit 541e24c. |
Test Results (shard 1)475 tests 475 ✅ 35s ⏱️ Results for commit 541e24c. |
Test Results (shard 5) 4 files 4 suites 1m 57s ⏱️ Results for commit 541e24c. |
Test Results (shard 4)2 316 tests 2 316 ✅ 2m 35s ⏱️ Results for commit 541e24c. |
Test Results (shard 2)588 tests 396 ✅ 2m 55s ⏱️ Results for commit 541e24c. |
Test Results 15 files 15 suites 10m 36s ⏱️ Results for commit 541e24c. |
#3345 is not a regression — the control was
Filed here as "a disposing owner stops answering its waiter" after Plugins' pin bump went red on
two teardown tests. I bisected five commits of #3291 before the premise fell over.
NackReachesTheWaiterDuringTeardownTestandLateNackReenqueueTestexist in both repos onpurpose — core's CI cannot stand up a monolith mesh, so the copy that exercises the behaviour lives
in Plugins and the copy that keeps core honest lives here. #3291 rewrote this side's copies to
the no-forced-teardown contract (the maintainer directive of 2026-09-04) and left the Plugins
originals asserting the contract it had just deleted.
Test project held constant, only
MeshWeaverRootvarying:6163dfacbf92305ae17d644de95d99165850One commit, and one clause: core's parked turn releases itself on
|| owner.IsShuttingDown; thePlugins copy waited for the test's own
finally. With the 8 s force-teardown deleted, a turn blindto the shutdown holds the owner at
DisposeHostedHubs— honestly pending — and the caller burns itsverdict budget.
What actually failed
The twins were held together by a comment, and it sat on this side only — on the copy whose
editor already knew. The reader who needed it was whoever edited the Plugins copy. A pinned
dependent does not rebuild on core's release event, so nothing was red until the bump a day later
produced a 55-second
VERDICT_TIMEOUTin a suite whose name points at the mesh.This PR is the half that belongs here
The enforcing guard has to live in the dependent — the only side that can see both files, because it
builds against
$(MeshWeaverRoot)atMW_PLATFORM_REF. That isSystemorph/MeshWeaver.Plugins#1359's
TeardownTwinParityTest, which compares each body below thenamespaceline against the core checkout at the pin, nevermain, so it reddens in the pinbump — the change that owes the update — and is silent otherwise. A missing platform checkout
fails rather than skips.
Here:
done until the Plugins copy carries it too. The block sits above the
namespace, which isexactly what the guard excludes — verified by running the guard against this worktree: 4/4,
rather than assumed.
CrossRepoPairGate.mdgains "Shape 7's worst form: the dependent holds a COPY of the test" —the incident, why a pinned dependent stays silent until the bump, and the two rules that
generalise past these two files: a duplicated test needs a parity guard rather than a comment, and
the marker goes on both copies.
Verification
DocumentationLinkIntegrityTest— passes.MeshWeaver.Graph.Test— clean under-c Release -warnaserror.Pairs-with: none — docs and comments only; this diff removes no public surface.
Refs #3345, #3291