Paired Change Sets
A change that spans core and MeshWeaver.Plugins is tested as ONE change set before either half
merges. Merging stays per repository, core first, and core never waits for Plugins (policy
core-merge-never-blocked, One Promotion Gate).
How to pair two pull requests
- Core pull request body:
Pairs-with: Systemorph/MeshWeaver.Plugins#<n>— the same line the cross-repo pair gate reads. - Plugins pull request body:
Core-ref: Systemorph/MeshWeaver#<n>.
That is all. What happens:
| where | what runs | what it proves |
|---|---|---|
core PR — Dependent suites (request) / (MeshWeaver.Plugins, advisory) |
MeshWeaver.Plugins core-candidate.yml, against the core PR's merge commit AND the Plugins PR's head |
the two halves compile and the reachable Plugins suites pass TOGETHER — advisory, reported on the core PR |
Plugins PR — paired-core.yml |
the same core-candidate.yml, dispatched from the Plugins side while the core PR is open |
the same pairing, re-run on every push to either half's Plugins side |
Plugins PR — Resolve the released platform |
the normal Plugins CI against the newest green core main build |
once the core half has landed AND is in a green build, the Plugins half is tested against it like any other change |
The order
- Core merges first, on its own checks. The paired run is information for the author, never a gate on the merge.
- core's CD builds and promotes the landed commit (~25 minutes to a promoted set).
- The Plugins half re-runs — push, or re-run the workflow.
Resolve the released platformchecks that the resolved set CONTAINS the declared core pull request's merge commit (by ancestry) and is RED, naming the set it saw, while it does not — so the Plugins half never goes green against a core that lacks what it needs. - The Plugins half merges; the next main-cd build pairs both, and the promotion gate arms it once the dependent suites pass.
Deleting-half-last still holds. When the core half REMOVES public surface the Plugins half uses,
the Plugins half must land first and be compatible with both — then it declares NO Core-ref: (it
does not need the core change), and the core half declares Pairs-with: as the pair gate demands.
Not covered
- Satellites other than MeshWeaver.Plugins are not paired this way; they find a core break in their own daily run.
- The paired run builds Plugins suites from source against the core candidate; in-mesh NodeType source is compiled by the compile gates, not here.