Skip to content

build(deps): cascade Verbara.Sdk 2.7.0 and Verbara.Sdk.Pro 2.17.0-pro - #332

Merged
Harol-Reina merged 7 commits into
mainfrom
feat/sdk-2-7-0-pin-cascade
Oct 4, 2026
Merged

Harol-Reina merged 7 commits into
mainfrom
feat/sdk-2-7-0-pin-cascade

Conversation

@Harol-Reina

Copy link
Copy Markdown
Contributor

Host leg of the cross-repo change sdk-2-7-0-pin-cascade (verbara-meta roadmap R-021, decision_ref: Verbara.Sdk/ADR-0040). Pro shipped its leg as v2.17.0-pro (Verbara.Sdk.Pro #180).

Do not merge until the H159 lab gate passes: a queued call taken by a member must end with a conversation owner, a screen-pop and the agent Busy. Evidence goes into verbara-lab and the measurement catalog.

What changes

  • 7 Verbara.Sdk.* pins move from 2.4.0 to 2.7.0, and 22 Verbara.Sdk.Pro.* pins move from 2.14.1-pro to 2.17.0-pro. Restore reports no NU1605 or NU1109.
  • DeferredPrimaryAmiConnection now forwards the three IAmiConnection members Sdk 2.7.0 added with default bodies: ReportsEventActionOutcome, the SendEventGeneratingActionAsync overload with EventActionOutcome?, and StateChanged. Without forwarding, the compiler stays silent while they are dropped. The tests were written first, and removing each forwarding turns a test red.
  • /metrics fix. Sdk 2.7.0 (since 2.6.1, Sdk backlog H167) ships OpenTelemetry 1.19.1 with OpenTelemetry.Exporter.Prometheus.AspNetCore 1.15.2-beta.1. That exporter calls a type removed in 1.19.1, so GET /metrics answered 200 with 0 bytes and logged nothing. ILC warned "will always throw", which no gate reads. This PR adds a central pin of the exporter at 1.19.1-beta.1, plus PrometheusScrapingEndpointTests. That test is red without the pin and green with it. The AOT binary now serves 110 sample lines. The pin goes away with the Sdk 2.8.0 hop (C16).
  • VoiceConversationBridge: comment only. Since Verbara.Sdk#377 the Sdk emits one CallConnectedEvent per queued call taken.
  • CHANGELOG [Unreleased] entry.

Verification

Local run on the rebased branch:

  • Release build with 0 warnings; 4,312 unit tests;
  • OpenAPI export plus fixture and residual-shape checks;
  • coverage 79.3%, patch 100%; Invariant Gates;
  • AOT publish with 0 warning IL and 0 "will always throw";
  • CodeQL branch gate: 0 results on added lines.

An independent verifier re-ran all of it in a fresh clone and mutation-checked the forwarding and the pin. Locally, 2.17.0-pro came from a pack of the identical tree, because this machine has no GitHub Packages credentials. This PR's CI restores it from the real feed.

Rollback

Revert this PR. Platform goes back to Sdk 2.4.0 and Pro 2.14.1-pro. There is no schema or configuration change.

🤖 Generated with Claude Code

DeferredPrimaryAmiConnection now forwards ReportsEventActionOutcome, the
SendEventGeneratingActionAsync(action, EventActionOutcome?, ct) overload and the
StateChanged event to the primary connection. Sdk 2.7.0 gave them default bodies, so
the wrapper compiled clean while answering false, dropping the outcome and raising
nothing. Four tests lock the forwarding; each fails when its forwarding is removed.
Verbara.Sdk.OpenTelemetry 2.7.0 raises OpenTelemetry to 1.19.1 but still
pulls OpenTelemetry.Exporter.Prometheus.AspNetCore 1.15.2-beta.1, whose
PrometheusSerializer calls OpenTelemetry.Internal.MathHelper, a type
1.19.1 removed. The exporter swallows the failure, so GET /metrics
answered 200 with an empty body (ILC: WriteDouble "will always throw").

Pin the exporter centrally at 1.19.1-beta.1 (transitive pinning is on);
the assets diff moves only that package, in Api and Api.Tests. Add a
/metrics test on the Api test host that asserts a non-empty scrape with
sample lines; it was red before the pin. Remove the pin when the Sdk
ships the aligned exporter (cascade C16 / Verbara.Sdk 2.8.0).
@Harol-Reina

Copy link
Copy Markdown
Contributor Author

H159 lab merge gate: waived, with evidence (not a pass)

The verbara-lab scenario platform/h159-queue-owner sets a strict gate: every call must pass. No branch run met it. The failures come from a pre-existing defect that main has as well, so the cascade does not cause them.

H159 itself held on every call that reached the agent: 71 of 71. Each ended with the agent as conversation owner, exactly one voice.screenpop on that agent's SSE stream, and the agent Busy during the call. 45 of those are confirmed by queue_log CONNECT.

Run Ref Reached the agent H159 passed
186881ce, 6762a80d main ba67f4c (Sdk 2.4.0, Pro 2.14.1-pro) 1/20 and 1/20 0 (no owner, as expected without H159)
45b36b15, af6ba8f2 this branch 2df558f (Sdk 2.7.0, Pro 2.17.0-pro) 19/20 and 19/20 19/19 and 19/19
20ed27ae branch, Asterisk column cache rebuilt 7/20 7/7
58ac35c1, 57cab411 branch 20/20 and 6/20 20/20 and 6/6

Why calls were not offered. RealtimeReconciliationService re-upserts each queue member every 60 s with paused=1. Pro's AddQueueMemberAsync builds the row "initially paused", and the ON CONFLICT clause overwrites paused. app_queue then stops offering calls to an agent the console shows as Available.

  • In every measured onset (3 of 3), that INSERT landed 0.14–1.06 s before the call joined.
  • On main the agent never changes state, so it is locked out from the first tick.
  • On this branch, each answered call clears the pause again until a tick lands in the window.

The code path is identical on both refs: Platform ba67f4c8..2df558fe and Pro v2.14.1-pro..v2.17.0-pro touch nothing in it. That defect is being fixed as its own cross-repo change (Pro + Platform) before the first customer go-live.

Recommendation, from an independent verifier who recomputed every run from the raw files: merge, recording this waiver. Evidence lives in the verbara-lab branch scenarios/platform-h159-queue-owner, under results/.

@Harol-Reina
Harol-Reina added this pull request to the merge queue Oct 4, 2026
Merged via the queue into main with commit 7c08f07 Oct 4, 2026
11 checks passed
@Harol-Reina
Harol-Reina deleted the feat/sdk-2-7-0-pin-cascade branch October 4, 2026 10:52
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.

1 participant