Skip to content

docs(#3454): what the satellite pin-set lane looks like, and how the three repos differ - #3502

Merged
rbuergi merged 1 commit into
mainfrom
docs/3454-satellite-pin-set-adoption
Sep 7, 2026
Merged

rbuergi merged 1 commit into
mainfrom
docs/3454-satellite-pin-set-adoption

Conversation

@rbuergi

@rbuergi rbuergi commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

The satellite half landed; this is what it measured

#3486 wrote check-pin-set-consistency.py and said the three ungated repositories would get their
gate in the satellite PRs that follow. They have:

repo PR denominator
MeshWeaver.SocialMedia Systemorph/MeshWeaver.SocialMedia#141 3 pins / 3 classified / 2 roles
MeshWeaver.Manufacturing Systemorph/MeshWeaver.Manufacturing#58 3 pins / 3 classified / 2 roles
MeshWeaver.Crm Systemorph/MeshWeaver.Crm#58 3 pins / 3 classified / 2 roles

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

SocialMedia Manufacturing Crm
how the tester pin is written $GITHUB_OUTPUT step output env: MW_IMAGE_DIGEST $GITHUB_OUTPUT step output
MW_PLATFORM_REF declared yes no no
lane passing a literal platform-ref: 1 0 1
calls node-repo-validate.yml yes no — hand-rolled yes

So 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_REF must be named so I8 CANNOT see it

I8's subject is a name matching platform.?ref whose value is a 40-character commit. A guard ref
carrying 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 validate opts a repo out of every OTHER central guard

check-workflow-timeouts.py and check-pr-secret-preflight.py run inside
node-repo-validate.yml. MeshWeaver.Manufacturing does not call that lane, so neither guard had
ever executed against it. Measured 2026-09-06, both siblings at 0 violations the same day:

::error file=.github/workflows/ci.yml::job 'preflight'   has no timeout-minutes …
::error file=.github/workflows/ci.yml::job 'validate'    has no timeout-minutes …
::error file=.github/workflows/ci.yml::job 'tag-modules' has no timeout-minutes …
check-workflow-timeouts: 6 job(s) checked, 4 reusable-call job(s) exempt, 3 violation(s), cap=45 min

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 main is inside a release wave (main-cd 7950/7951 queued/pending when this was opened; 7946
had already completed failure at 22:25Z). A merge here enqueues another wave and would move what a
3.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

  • Docs only — one page, Data/Architecture/PinSetConsistency.md. No public surface moves, no
    workflow changes, no script changes.
  • No new internal links are added, so DocumentationLinkIntegrityTest has nothing new to resolve.
  • No What's New entry: fix(#3454): a repository's platform pins must name ONE promoted build #3486 already shipped the user-facing note for this feature
    (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

…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
Copilot AI lite review requested due to automatic review settings September 6, 2026 23:12

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

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-set CI job shape (with an example YAML snippet) and the rationale for naming MW_PIN_GATE_REF so 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.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

488 tests  ±0   488 ✅ ±0   36s ⏱️ +5s
  1 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

1 016 tests  ±0   1 016 ✅ ±0   1m 9s ⏱️ -4s
    2 suites ±0       0 💤 ±0 
    2 files   ±0       0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

251 tests  ±0   251 ✅ ±0   2m 18s ⏱️ -3s
  1 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

1 599 tests  ±0   1 405 ✅ ±0   2m 5s ⏱️ -6s
    4 suites ±0     194 💤 ±0 
    4 files   ±0       0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

    5 files  ±0      5 suites  ±0   2m 23s ⏱️ +14s
1 472 tests ±0  1 472 ✅ ±0  0 💤 ±0  0 ❌ ±0 
1 473 runs  ±0  1 473 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

1 076 tests  ±0   1 076 ✅ ±0   3m 30s ⏱️ -2s
    3 suites ±0       0 💤 ±0 
    3 files   ±0       0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test Results

   16 files  ±0     16 suites  ±0   12m 5s ⏱️ +7s
5 902 tests ±0  5 708 ✅ ±0  194 💤 ±0  0 ❌ ±0 
5 903 runs  ±0  5 709 ✅ ±0  194 💤 ±0  0 ❌ ±0 

Results for commit 14873f6. ± Comparison against base commit c841430.

@rbuergi

rbuergi commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Hold discharged — releasing

This was drafted at 23:12Z because core main-cd 7954 was pending and a docs merge would have enqueued another CD wave, moving what a 3.0.0 tag could be cut from.

That premise is now discharged. Three sets have sealed — 3.0.0-ci.7962 (6577052de), 7964 (93dd88941) and 7969 (e64689e7f) — and a new CD run cannot unmake a set that has already sealed and been named. The maintainer's choice is between those three; nothing merging now removes an option from it.

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 — Doc/Architecture/PinSetConsistency, the satellite lane's shape, the MW_PIN_GATE_REF I8-invisibility rule, the per-repo difference table, and the rule that a hand-rolled copy of a shared lane silently opts out of every guard that lane grows later — belongs on main rather than in a draft.

That last rule earned a second instance hours after it was written: MeshWeaver.Plugins runs no check-pr-secret-preflight.py at all, because it hand-rolls validate and the guard lives inside the shared lane (#3504).

@rbuergi
rbuergi marked this pull request as ready for review September 7, 2026 05:27
@rbuergi
rbuergi added this pull request to the merge queue Sep 7, 2026
Merged via the queue into main with commit 0707ac1 Sep 7, 2026
31 checks passed
@rbuergi
rbuergi deleted the docs/3454-satellite-pin-set-adoption branch September 13, 2026 10:19
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