Skip to content

feat(control-lane): the deployment generates its announcement key; the control instance registers it - #5822

Merged
meshweaver-cloud[bot] merged 3 commits into
mainfrom
feat/control-lane-generate
Sep 27, 2026
Merged

meshweaver-cloud[bot] merged 3 commits into
mainfrom
feat/control-lane-generate

Conversation

@rbuergi

@rbuergi rbuergi commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

What

The maintainer decided the announcement-key flow runs the other way round: the deployment generates its own key, and the control instance registers it. The control instance no longer issues the key and hands it to the client. Refs #5757, #5791, #5807.

  • /Admin/Settings/ControlLane (the target side, on every instance) gains Generate key / Generate new key.
    • The key is generated on the server through InstanceSecrets.Generate and shown ONCE with its fingerprint. This uses the platform's write-only secret section.
    • The dialog tells the administrator to send the key over a secure channel (never plain e-mail) and the fingerprint separately. Until Systemorph registers the key, Test connection reads as a mismatch.
    • Pasting a key and clicking Save still works.
  • Control-side texts (hosting.annKey.*) now read "register the key the deployment generated", followed by a fingerprint compare. They no longer say "issue".
    • issue → "Register key", and rotate → "Register new key".
    • New keys: keyLabel, keyPlaceholder, fingerprintHint.
    • The issue-side sendHint and the vault-copy keys (vaultFiled, vaultSkipped, noVault) are removed. They were never used by merged code, only by the held Plugins draft.
    • Registering writes no vault copy: the control instance verifies from its own encrypted store.
  • Docs:
    • SelfUpdateAnnouncementKey is rewritten for the new direction: the shape table, "Generating, registering and testing", the rotation window, the client step-by-step, and owner actions.
    • It uses the new paths /Admin/Settings/ControlLane (Admin app: /Admin is the Admin app, personal settings are the person's own app, Inbox app for every user #5807) and /Hosting/Integrations/Deployment/<id> (from the app map).
    • InstanceSecrets and the Architecture map are updated to match.
    • No step involves a vault command; check-manual-keyvault is clean.
    • The comments in MemexConfiguration and SelfUpdateHandover now name the new path.

Verification

  • Release builds with -warnaserror: Memex.Portal.Shared.Test, MeshWeaver.Documentation.Test, MeshWeaver.Messaging.Hub.Test. Each reports 0 errors and 0 warnings.
  • ControlLane* tests: 23/23 passed. They include the new The_deployment_generates_the_key_and_the_control_instance_registers_it, which checks:
    • the deployment generates the key (source generate);
    • Test connection reports a mismatch before registration;
    • the control instance registers the same value, and the fingerprints are equal;
    • Test connection reports a match as client-b;
    • the key never appears in a log line.
  • MeshWeaver.Documentation.Test: 649/649 passed.
  • Locali*: 66/66 passed.

Cross-repo

Pairs-with: none — no public type or member is removed.
Implementers: none — no interface member is added.
Mirror-sync: npm run sync:i18n -- --ref <merged core sha> in the MeshWeaver.Plugins companion #2435 (held draft). It adds ui.controlLaneGenerate, ui.controlLaneRegenerate, ui.controlLaneGeneratedNote, hosting.annKey.keyLabel, hosting.annKey.keyPlaceholder and hosting.annKey.fingerprintHint, removes hosting.annKey.sendHint, hosting.annKey.vaultFiled, hosting.annKey.vaultSkipped and hosting.annKey.noVault, and re-words ui.mdControlLaneIntro, hosting.annKey.intro, hosting.annKey.issue, hosting.annKey.rotate and hosting.annKey.notVerified.

Nothing needs recycling after deploy: the settings tab is compiled platform code.

🤖 Generated with Claude Code

…e control instance registers it

- /Admin/Settings/ControlLane gains Generate key / Generate new key (server-side, shown once
  with its fingerprint, via the platform's write-only secret section).
- Control-side texts become 'register the key the deployment generated' plus a fingerprint
  compare; the issue-side send hint is gone.
- Docs: SelfUpdateAnnouncementKey (reversed flow, client steps, /Admin/Settings/ControlLane and
  /Hosting/Integrations/Deployment/<id>), InstanceSecrets, Architecture map.
- Test: generate on the deployment, register on the control instance, fingerprints equal,
  Test connection mismatch before and match after, key never logged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 27, 2026 17:55
…l instance verifies from its own store

Removes the now-unused hosting.annKey.vaultFiled/vaultSkipped/noVault keys.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

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.

Copilot review overview

🟡 Changes recommended

Moderate issues remain in key-generation state handling and outdated fallback guidance.

Review effort: Lite
Findings: 2 Medium severity · 2 Low severity

Open (4)
What changed in this PR

Reverses announcement-key ownership so deployments generate keys and control instances register them.

Changes:

  • Adds deployment-side key generation and round-trip coverage.
  • Updates English/German localization and architecture documentation.
  • Updates control-lane paths and related comments.
File Description
test/​Memex.Portal.Shared.Test/​ControlLaneKeyRoundTripTest.cs Tests deployment-generated key flow.
src/​MeshWeaver.Messaging.Hub/​Localization/​strings.en.json Updates English localization.
src/​MeshWeaver.Messaging.Hub/​Localization/​strings.de.json Updates German localization.
src/​MeshWeaver.Documentation/​Data/​Architecture/​SelfUpdateAnnouncementKey.md Documents the reversed flow.
src/​MeshWeaver.Documentation/​Data/​Architecture/​InstanceSecrets.md Updates secret usage documentation.
src/​MeshWeaver.Documentation/​Data/​Architecture.md Updates the architecture index.
memex/​Memex.Portal.Shared/​Settings/​ControlLaneSettingsTab.cs Adds key-generation UI wiring.
memex/​Memex.Portal.Shared/​SelfUpdate/​SelfUpdateHandover.cs Updates path references.
memex/​Memex.Portal.Shared/​MemexConfiguration.cs Updates configuration comments.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

"settings.controlLane": "Kontroll-Lane",
"ui.controlLane": "Kontroll-Lane",
"ui.mdControlLaneIntro": "Diese Instanz übergibt ihre Plattform-Updates an die **Kontrollinstanz**, die sie ausrollt. Jede Übergabe signiert sie mit einem **Ankündigungsschlüssel**, den die Kontrollinstanz für dieses Deployment ausgestellt hat. Fügen Sie diesen Schlüssel unten ein und klicken Sie auf **Speichern**. Er wird verschlüsselt gespeichert, wirkt sofort und ohne Neustart und wird **nie wieder angezeigt**: Diese Seite zeigt nur seinen Fingerabdruck. Vergleichen Sie den Fingerabdruck mit dem, den die Kontrollinstanz anzeigt, und klicken Sie dann auf **Verbindung testen**.",
"ui.mdControlLaneIntro": "Diese Instanz übergibt ihre Plattform-Updates an die **Kontrollinstanz**, die sie ausrollt. Jede Übergabe signiert sie mit einem **Ankündigungsschlüssel**. Klicken Sie auf **Schlüssel generieren**, um hier einen zu erzeugen: Er wird **einmal** angezeigt, zusammen mit seinem Fingerabdruck. Senden Sie den Schlüssel über einen **sicheren Kanal** (nie per gewöhnlicher E-Mail) an Systemorph und den Fingerabdruck separat. Sobald Systemorph ihn registriert hat, zeigt **Verbindung testen** eine Übereinstimmung. Der Schlüssel wird verschlüsselt gespeichert, wirkt ohne Neustart und wird nie wieder angezeigt. Falls Sie stattdessen einen Schlüssel von Systemorph erhalten haben, fügen Sie ihn unten ein und klicken Sie auf **Speichern**.",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in cbdb000. ui.controlLaneTestFleet (German) now tells the administrator to click Schlüssel generieren, send the key over a secure channel, and test again once it is registered. It no longer says "ausgestellt".

"settings.controlLane": "Control lane",
"ui.controlLane": "Control lane",
"ui.mdControlLaneIntro": "This instance hands its platform updates to the **control instance**, which rolls them out. It signs each hand-over with an **announcement key** that the control instance issued for this deployment. Paste that key below and press **Save**. It is stored encrypted, takes effect immediately without a restart, and is **never shown again**: this page shows only its fingerprint. Compare the fingerprint with the one the control instance shows, then press **Test connection**.",
"ui.mdControlLaneIntro": "This instance hands its platform updates to the **control instance**, which rolls them out. It signs each hand-over with an **announcement key**. Click **Generate key** to create one here: it is shown **once**, with its fingerprint. Send the key to Systemorph over a **secure channel** (never plain e-mail), and the fingerprint separately. Once Systemorph has registered it, **Test connection** shows a match. The key is stored encrypted, takes effect without a restart, and is never shown again. If Systemorph gave you a key instead, paste it below and click **Save**.",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in cbdb000. ui.controlLaneTestFleet (English) now says to click Generate key, send the key to Systemorph over a secure channel, and test again once it is registered. The German text got the matching change.

Comment on lines 793 to 797
// Secrets a global admin may ENTER in the portal instead of an operator minting
// them in a vault (Doc/Architecture/InstanceSecrets). Each slot is a key the code
// below READS: the self-updater's signing key (Settings ▸ Control lane, on a target
// below READS: the self-updater's signing key (/Admin/Settings/ControlLane, on a target
// instance) and a deployment's own announcement key as the control inbox verifies it
// (issued on the Deployment record page, on the control instance). The fleet-wide

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in cbdb000. The slot comment now says the signing key is GENERATED at /Admin/Settings/ControlLane on the target, and the per-deployment key is REGISTERED at /Hosting/Integrations/Deployment/{id} on the control instance, from the value the deployment generated.

Comment on lines +59 to +60
GenerateLabel = host.Localize("ui.controlLaneGenerate"),
RegenerateLabel = host.Localize("ui.controlLaneRegenerate"),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in cbdb000. The class summary now describes generating the key locally (shown once with its fingerprint, then sent to be registered), with pasting a key as the alternative.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

461 tests  ±0   461 ✅ ±0   57s ⏱️ -1s
  3 suites ±0     0 💤 ±0 
  3 files   ±0     0 ❌ ±0 

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

  1 files  ±0    1 suites  ±0   3m 11s ⏱️ +31s
348 tests ±0  348 ✅ ±0  0 💤 ±0  0 ❌ ±0 
352 runs  ±0  352 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

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

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

    3 files  ±0      3 suites  ±0   5m 56s ⏱️ -28s
2 232 tests ±0  2 232 ✅ ±0  0 💤 ±0  0 ❌ ±0 
2 233 runs  ±0  2 233 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

764 tests  ±0   573 ✅ ±0   7m 8s ⏱️ -1s
  3 suites ±0   191 💤 ±0 
  3 files   ±0     0 ❌ ±0 

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

This pull request removes 25 and adds 9 tests. Note that renamed tests count towards both.

   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---, expected: True)
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
 ---> (Inner Exception #1) System.InvalidOperationException: boom<---
 ---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432)
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (boom)
…
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a MIXED aggregate — one transient branch, one genu"···, exception: System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (source B is misconfigured)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
, expected: False)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a nested aggregate with one genuine leaf", exception: System.AggregateException: One or more errors occurred. (One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (boom)) (Failed to connect to 10.42.18.4:5432)
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (boom)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.InvalidOperationException: boom<---

   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
, expected: False)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a nested aggregate, all leaves transient", exception: System.AggregateException: One or more errors occurred. (One or more errors occurred. (Failed to connect to 10.42.18.4:5432)) (Failed to connect to 10.42.18.4:5432)
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a reflective wrapper around a transient cause", exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.Net.Sockets.SocketException (110): Connection timed out
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a transient cause UNDER an aggregate branch's wrap"···, exception: System.AggregateException: One or more errors occurred. (wrapped)
 ---> System.InvalidOperationException: wrapped
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "an 'initialization failed' wrapper around a transi"···, exception: System.InvalidOperationException: Hub 'x' initialization failed
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "an aggregate whose branches are ALL transient (two"···, exception: System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (Name or service not known)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "the #4067 shape: transient provider fault wrapping"···, exception: MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
 ---> System.TimeoutException: Timeout during connection attempt, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "the #4068 shape: transient provider fault wrapping"···, exception: MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
 ---> System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known, expected: True)

♻️ This comment has been updated with latest results.

…, the slot comment and the fleet-secret test message

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

    5 files  ±0      5 suites  ±0   14m 1s ⏱️ -52s
4 282 tests +1  4 280 ✅ +1  2 💤 ±0  0 ❌ ±0 
4 286 runs  +1  4 284 ✅ +1  2 💤 ±0  0 ❌ ±0 

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

This pull request removes 4 and adds 3 tests. Note that renamed tests count towards both.
   --- End of inner exception stack trace ---, isDenial: True)
 ---> System.UnauthorizedAccessException: Access denied
Memex.Portal.Shared.Test.InstanceIdRulesMatchTheRegistryTest ‑ TheSetupHostAgreesWithTheRegistry(candidate: "aea8b30a-2053-430d-814d-e8a76d6e9e78")
Memex.Portal.Shared.Test.SessionDenialIsAnAnswerTest ‑ OnlyAVerdictReadsAsADenial(shape: "the same verdict nested, as a late denial dispatch"···, failure: System.InvalidOperationException: write failed
Memex.Portal.Shared.Test.ControlLaneKeyRoundTripTest ‑ The_deployment_generates_the_key_and_the_control_instance_registers_it
Memex.Portal.Shared.Test.InstanceIdRulesMatchTheRegistryTest ‑ TheSetupHostAgreesWithTheRegistry(candidate: "b3e1fadf-c167-4474-8c3e-81b05fdf76ca")
Memex.Portal.Shared.Test.SessionDenialIsAnAnswerTest ‑ OnlyAVerdictReadsAsADenial(shape: "the same verdict nested, as a late denial dispatch"···, failure: System.InvalidOperationException: write failed
 ---> System.UnauthorizedAccessException: Access denied
   --- End of inner exception stack trace ---, isDenial: True)

@github-actions

Copy link
Copy Markdown
Contributor

Test Results

   17 files  ±0     17 suites  ±0   36m 1s ⏱️ -53s
9 783 tests +1  9 590 ✅ +1  193 💤 ±0  0 ❌ ±0 
9 792 runs  +1  9 599 ✅ +1  193 💤 ±0  0 ❌ ±0 

Results for commit cbdb000. ± Comparison against base commit f78fcf6.

This pull request removes 29 and adds 12 tests. Note that renamed tests count towards both.

   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---, expected: True)
   --- End of inner exception stack trace ---, isDenial: True)
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
 ---> (Inner Exception #1) System.InvalidOperationException: boom<---
 ---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432)
…
Memex.Portal.Shared.Test.ControlLaneKeyRoundTripTest ‑ The_deployment_generates_the_key_and_the_control_instance_registers_it
Memex.Portal.Shared.Test.InstanceIdRulesMatchTheRegistryTest ‑ TheSetupHostAgreesWithTheRegistry(candidate: "b3e1fadf-c167-4474-8c3e-81b05fdf76ca")
Memex.Portal.Shared.Test.SessionDenialIsAnAnswerTest ‑ OnlyAVerdictReadsAsADenial(shape: "the same verdict nested, as a late denial dispatch"···, failure: System.InvalidOperationException: write failed
 ---> System.UnauthorizedAccessException: Access denied
   --- End of inner exception stack trace ---, isDenial: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a MIXED aggregate — one transient branch, one genu"···, exception: System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (source B is misconfigured)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.InvalidOperationException: source B is misconfigured<---
, expected: False)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a nested aggregate with one genuine leaf", exception: System.AggregateException: One or more errors occurred. (One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (boom)) (Failed to connect to 10.42.18.4:5432)
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (boom)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.InvalidOperationException: boom<---

   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
, expected: False)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a nested aggregate, all leaves transient", exception: System.AggregateException: One or more errors occurred. (One or more errors occurred. (Failed to connect to 10.42.18.4:5432)) (Failed to connect to 10.42.18.4:5432)
 ---> System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432<---
, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a reflective wrapper around a transient cause", exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.Net.Sockets.SocketException (110): Connection timed out
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "a transient cause UNDER an aggregate branch's wrap"···, exception: System.AggregateException: One or more errors occurred. (wrapped)
 ---> System.InvalidOperationException: wrapped
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "an 'initialization failed' wrapper around a transi"···, exception: System.InvalidOperationException: Hub 'x' initialization failed
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---, expected: True)
MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest ‑ Classifies(shape: "an aggregate whose branches are ALL transient (two"···, exception: System.AggregateException: One or more errors occurred. (Failed to connect to 10.42.18.4:5432) (Name or service not known)
 ---> MeshWeaver.Messaging.Hub.Test.InfrastructureFaultTest+ProviderException (0x80004005): Failed to connect to 10.42.18.4:5432
   --- End of inner exception stack trace ---
 ---> (Inner Exception #1) System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known<---
, expected: True)
…

@meshweaver-cloud
meshweaver-cloud Bot merged commit b21d138 into main Sep 27, 2026
49 checks passed
@rbuergi
rbuergi deleted the feat/control-lane-generate 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