Repository navigation
docs(#3454): what the satellite pin-set lane looks like, and how the three repos differ - #3502
Conversation
…three repos differ #3486 wrote the gate and said the satellite PRs would follow. They have — MeshWeaver.SocialMedia#141, MeshWeaver.Manufacturing#58, MeshWeaver.Crm#58 — and adopting it measured three things worth keeping: * The three repos are NOT variations of one shape. Two write their tester pin into a $GITHUB_OUTPUT and one into an env: key; one declares MW_PLATFORM_REF and two do not; one passes no literal platform-ref: at all, so I3 and I8 have nothing to compare there and the printed denominator says so. * MW_PIN_GATE_REF has to be named so I8 CANNOT see it. A guard ref matching `platform.?ref` would be read as a platform source ref and demanded a lane pinned at it — the coupling the gate refuses to assert elsewhere. It is also why the script cannot simply be fetched at each repo's MW_PLATFORM_REF: that value is older than the script. * MeshWeaver.Manufacturing hand-rolls `validate`, and check-workflow-timeouts.py and check-pr-secret-preflight.py live INSIDE node-repo-validate.yml — so neither had ever run against it. Three uncapped jobs against a 45-minute fleet cap and a 360-minute GitHub default, with both siblings at 0 violations the same day. A repo keeping a hand-rolled copy of a shared lane silently opts out of every guard that lane grows later, and nothing reports it. No What's New entry: #3486 already shipped the user-facing note for this feature and this is its addendum. Docs only; no public surface moves. Pairs-with: none — the diff is one documentation page. Refs #3454
There was a problem hiding this comment.
🟢 Approval recommended
Documentation-only change with one minor date wording issue noted in review comments.
Pull request overview
This PR updates the platform documentation for pin-set consistency to capture what the newly-adopted satellite pin-set gate job looks like in practice and what was measured to differ across the three previously-ungated satellite repos.
Changes:
- Documents the satellite
pin-setCI job shape (with an example YAML snippet) and the rationale for namingMW_PIN_GATE_REFso it cannot be misclassified by invariant I8. - Adds a measured comparison table for SocialMedia vs Manufacturing vs Crm to show why some invariants have a “measured zero” denominator in Manufacturing today.
- Records an operational lesson: hand-rolling shared “validate” lanes silently opts a repo out of central guards that run inside
node-repo-validate.yml.
File summaries
| File | Description |
|---|---|
| src/MeshWeaver.Documentation/Data/Architecture/PinSetConsistency.md | Adds a new section detailing the satellite gate job shape and measured differences across the three satellite repos, including implications of hand-rolled lanes. |
Review details
- Files reviewed: 1/1 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.
Hold discharged — releasingThis was drafted at 23:12Z because core That premise is now discharged. Three sets have sealed — Releasing rather than leaving it drafted, because the alternative is what happened to Plugins#1417 tonight: a held PR whose holder ended, sitting in a state that produces no signal. Its work product — That last rule earned a second instance hours after it was written: MeshWeaver.Plugins runs no |
The satellite half landed; this is what it measured
#3486wrotecheck-pin-set-consistency.pyand said the three ungated repositories would get theirgate in the satellite PRs that follow. They have:
Each was falsified BOTH ways on its own branch — a deliberate half-move of one of the two
platform-image-digest:literals, watched RED naming I1 and I2 over a printed non-zero denominator,then restored. The run URLs are in each PR body.
This PR is the work product: three things the adoption measured that are platform-level, not
repo-local, and that are invisible from any one repository.
🚨 The three repos are not variations of one shape
$GITHUB_OUTPUTstep outputenv: MW_IMAGE_DIGEST$GITHUB_OUTPUTstep outputMW_PLATFORM_REFdeclaredplatform-ref:node-repo-validate.ymlSo I3 and I8 have nothing to compare in Manufacturing today, and the printed denominator says so
instead of the verdict quietly reading "consistent". That is the denominator rule working at
repository granularity.
🚨
MW_PIN_GATE_REFmust be named so I8 CANNOT see itI8's subject is a name matching
platform.?refwhose value is a 40-character commit. A guard refcarrying that name would be read as a platform source ref and then demanded to have a lane pinned
at it — the exact coupling the gate refuses to assert elsewhere (Plugins#1268 moved two of them
together and went red). The image a repository pins and the source a guard runs are two different
objects.
It is also why the script could not simply be fetched at each repo's existing
MW_PLATFORM_REF:that value is older than the script, so the fetch would fail red on every run — correct
behaviour, and a dead end for adoption.
🚨 Hand-rolling
validateopts a repo out of every OTHER central guardcheck-workflow-timeouts.pyandcheck-pr-secret-preflight.pyrun insidenode-repo-validate.yml. MeshWeaver.Manufacturing does not call that lane, so neither guard hadever executed against it. Measured 2026-09-06, both siblings at 0 violations the same day:
GitHub's default is 360 minutes against a fleet cap of 45. Capped in the Manufacturing PR. The
transferable rule, and the reason this belongs in the platform doc tree: a repository that keeps a
hand-rolled copy of a shared lane silently opts out of every guard that lane grows later, and
nothing anywhere reports it — the same shape as the pin gate that did not exist.
🚦 HELD ON PURPOSE — draft, not ready
Core
mainis inside a release wave (main-cd7950/7951 queued/pending when this was opened; 7946had already completed
failureat 22:25Z). A merge here enqueues another wave and would move what a3.0.0 tag is cut from. This is docs-only and can wait; take it out of draft when the release
session says the wave has settled.
Verification
Data/Architecture/PinSetConsistency.md. No public surface moves, noworkflow changes, no script changes.
DocumentationLinkIntegrityTesthas nothing new to resolve.(
2026-09-06-a-platform-update-no-longer-passes-as-a-whole-one.md) and this is its addendum.Pairs-with: none — the diff is one documentation page.
Refs #3454