Skip to content

The core twins name the guard that enforces them; shape 7's worst form is written down (#3345) - #3346

Merged
meshweaver-cloud[bot] merged 1 commit into
mainfrom
fix/3345-twin-parity-is-a-guard-not-a-comment
Sep 5, 2026
Merged

meshweaver-cloud[bot] merged 1 commit into
mainfrom
fix/3345-twin-parity-is-a-guard-not-a-comment

Conversation

@rbuergi

@rbuergi rbuergi commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

#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.

NackReachesTheWaiterDuringTeardownTest and LateNackReenqueueTest exist in both repos on
purpose — 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 MeshWeaverRoot varying:

core commit result
6163dfacb #3291's branch point 2/2 pass
f92305ae1 #3291, commit 1 of 5 0/2 fail
7d644de95 the pin being replaced 2/2 pass
d99165850 the pin being taken 0/2 fail

One commit, and one clause: core's parked turn releases itself on || owner.IsShuttingDown; the
Plugins copy waited for the test's own finally. With the 8 s force-teardown deleted, a turn blind
to the shutdown holds the owner at DisposeHostedHubs — honestly pending — and the caller burns its
verdict 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_TIMEOUT in 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) at MW_PLATFORM_REF. That is
Systemorph/MeshWeaver.Plugins#1359's 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 otherwise. A missing platform checkout
fails rather than skips.

Here:

  • Both twins 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,
    rather than assumed.
  • CrossRepoPairGate.md gains "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.
  • The Plugins parity guard against this worktree — 4/4 (proves the comment edit is parity-safe).

Pairs-with: none — docs and comments only; this diff removes no public surface.

Refs #3345, #3291

… 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>
Copilot AI lite review requested due to automatic review settings September 5, 2026 10:53
@meshweaver-cloud
meshweaver-cloud Bot enabled auto-merge September 5, 2026 10:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 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.md with 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.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

251 tests   251 ✅  1m 45s ⏱️
  1 suites    0 💤
  1 files      0 ❌

Results for commit 541e24c.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

369 tests   367 ✅  46s ⏱️
  3 suites    2 💤
  3 files      0 ❌

Results for commit 541e24c.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

475 tests   475 ✅  35s ⏱️
  1 suites    0 💤
  1 files      0 ❌

Results for commit 541e24c.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

    4 files      4 suites   1m 57s ⏱️
1 503 tests 1 503 ✅ 0 💤 0 ❌
1 504 runs  1 504 ✅ 0 💤 0 ❌

Results for commit 541e24c.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

2 316 tests   2 316 ✅  2m 35s ⏱️
    3 suites      0 💤
    3 files        0 ❌

Results for commit 541e24c.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

588 tests   396 ✅  2m 55s ⏱️
  3 suites  192 💤
  3 files      0 ❌

Results for commit 541e24c.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Test Results

   15 files     15 suites   10m 36s ⏱️
5 502 tests 5 308 ✅ 194 💤 0 ❌
5 503 runs  5 309 ✅ 194 💤 0 ❌

Results for commit 541e24c.

@meshweaver-cloud
meshweaver-cloud Bot added this pull request to the merge queue Sep 5, 2026
Merged via the queue into main with commit dca0c30 Sep 5, 2026
28 checks passed
@rbuergi
rbuergi deleted the fix/3345-twin-parity-is-a-guard-not-a-comment branch October 10, 2026 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants