test: preserve Axis B connection semantics #93

Merged
ada merged 4 commits from ada/axis-b-connected-selector-20260912 into master 2026-09-12 10:25:18 +00:00
Collaborator

Problem

Follow-up review found that the deterministic Axis-B fixture still replaced both application destination selectors' upstream Connected: f.connected callbacks with Connected: nil. That changed IVNP selection semantics and invalidated v2.4.1+rs.1-dev.4 as a promotion candidate.

Approach

  • Preserve both pinned upstream application selector callbacks exactly and retain a strict two-anchor source guard.
  • Compare time-separated active runtime routes by bounded semantic shape (scope, fixed owner, peer count), while independently requiring signature-valid RouterInfo, exact router/config identity, freshness, expected scopes, and every endpoint/reply/peer to belong to the same fixed signed mesh.
  • Allow a single shared 180-second snapshot convergence budget, retrying only transient missing proof files; malformed/stale/invalid proof content remains fail-closed.
  • Add static negative regression forbidding Connected: nil.

Validation

Exact head: fc827f78a88f63be1c07026884f2b36c047a1081

  • shell syntax checks: success
  • focused Axis-B harness test: success
  • focused test with ambient PYTHONOPTIMIZE=1: success
  • git diff --check: success
  • Forgejo CI #1030: success
  • native Linux ARM64 signed-IVNP gate: IVNP_AXIS_B_PASS
    • real upstream Connected: f.connected callbacks retained
    • Go control and Rust candidate both traversed the same signed five-router mesh
    • active runtime semantic parity and Rust marker correlation verified
    • final cleanup and sensitive-state absence verified
    • preserved raw ov1.* bearer count: zero
  • independent exact-head review: approve, no P0/P1 findings

A new immutable dev counter is required after merge; dev.4 remains an immutable non-promotable candidate.

## Problem Follow-up review found that the deterministic Axis-B fixture still replaced both application destination selectors' upstream `Connected: f.connected` callbacks with `Connected: nil`. That changed IVNP selection semantics and invalidated `v2.4.1+rs.1-dev.4` as a promotion candidate. ## Approach - Preserve both pinned upstream application selector callbacks exactly and retain a strict two-anchor source guard. - Compare time-separated active runtime routes by bounded semantic shape (`scope`, fixed owner, peer count), while independently requiring signature-valid RouterInfo, exact router/config identity, freshness, expected scopes, and every endpoint/reply/peer to belong to the same fixed signed mesh. - Allow a single shared 180-second snapshot convergence budget, retrying only transient missing proof files; malformed/stale/invalid proof content remains fail-closed. - Add static negative regression forbidding `Connected: nil`. ## Validation Exact head: `fc827f78a88f63be1c07026884f2b36c047a1081` - shell syntax checks: success - focused Axis-B harness test: success - focused test with ambient `PYTHONOPTIMIZE=1`: success - `git diff --check`: success - Forgejo CI #1030: success - native Linux ARM64 signed-IVNP gate: `IVNP_AXIS_B_PASS` - real upstream `Connected: f.connected` callbacks retained - Go control and Rust candidate both traversed the same signed five-router mesh - active runtime semantic parity and Rust marker correlation verified - final cleanup and sensitive-state absence verified - preserved raw `ov1.*` bearer count: zero - independent exact-head review: approve, no P0/P1 findings A new immutable dev counter is required after merge; `dev.4` remains an immutable non-promotable candidate.
test: preserve Axis B connection semantics
All checks were successful
Rust CI / Format, lint, and test (pull_request) Successful in 3m47s
Rust CI / Build and start linux/arm64 image (no push) (pull_request) Successful in 10s
a900901675
test: allow signed Axis B route rotation
Some checks failed
Rust CI / Build and start linux/arm64 image (no push) (pull_request) Has been cancelled
Rust CI / Format, lint, and test (pull_request) Has been cancelled
c07766bd3d
test: retry transient Axis B proof gaps
All checks were successful
Rust CI / Format, lint, and test (pull_request) Successful in 4m13s
Rust CI / Build and start linux/arm64 image (no push) (pull_request) Successful in 10s
161c40766c
test: bound Axis B snapshot convergence
All checks were successful
Rust CI / Format, lint, and test (pull_request) Successful in 3m21s
Rust CI / Build and start linux/arm64 image (no push) (pull_request) Successful in 7s
fc827f78a8
ada left a comment

Independent exact-head release review: APPROVE, no P0/P1 findings at fc827f78a88f63be1c07026884f2b36c047a1081. Both upstream Connected: f.connected callbacks are preserved; retries are globally bounded to 180 seconds and only handle missing proof files; malformed/signature/config/freshness failures remain immediate. Route normalization is bounded by exact runtime identity/config plus independently validated fixed signed-mesh membership and scope/owner/peer-count shape. CI #1030 and exact-head native ARM64 IVNP_AXIS_B_PASS succeeded.

Independent exact-head release review: **APPROVE**, no P0/P1 findings at `fc827f78a88f63be1c07026884f2b36c047a1081`. Both upstream `Connected: f.connected` callbacks are preserved; retries are globally bounded to 180 seconds and only handle missing proof files; malformed/signature/config/freshness failures remain immediate. Route normalization is bounded by exact runtime identity/config plus independently validated fixed signed-mesh membership and scope/owner/peer-count shape. CI #1030 and exact-head native ARM64 `IVNP_AXIS_B_PASS` succeeded.
ada merged commit 8913edcae9 into master 2026-09-12 10:25:18 +00:00
ada deleted branch ada/axis-b-connected-selector-20260912 2026-09-12 10:25:18 +00:00
Author
Collaborator

Release trail completed:

  • merged revision: 8913edcae9b10fa54e6e5849a22c1a8924b73c2a
  • verified dev tag/image: v2.4.1+rs.1-dev.5 / code.rly.best/gofix/portal-tunnel-rs:v2.4.1-rs.1-dev.5
  • production tag/image: v2.4.1+rs.1 / code.rly.best/gofix/portal-tunnel-rs:v2.4.1-rs.1
  • tagged dev CI #1032: success
  • initial production run #1033 failed during the protocol-transition outage; the immutable tag was not moved. The same tag/ref was dispatched again after official v2.4.1 expose clients restored Forgejo, and workflow #1034 succeeded.
  • production binary/public /sdk/domain: v2.4.1+rs.1
  • official v2.4.1 and retained v2.4.0 client public E2E: success
  • eight uvm expose units upgraded to official v2.4.1 and active
  • rollback containers removed after verification
  • local and remote preserved raw bearer scans: zero
  • release note: https://code.rly.best/gofix/portal-tunnel-rs/releases/tag/v2.4.1+rs.1
Release trail completed: - merged revision: `8913edcae9b10fa54e6e5849a22c1a8924b73c2a` - verified dev tag/image: `v2.4.1+rs.1-dev.5` / `code.rly.best/gofix/portal-tunnel-rs:v2.4.1-rs.1-dev.5` - production tag/image: `v2.4.1+rs.1` / `code.rly.best/gofix/portal-tunnel-rs:v2.4.1-rs.1` - tagged dev CI #1032: success - initial production run #1033 failed during the protocol-transition outage; the immutable tag was not moved. The same tag/ref was dispatched again after official v2.4.1 expose clients restored Forgejo, and workflow #1034 succeeded. - production binary/public `/sdk/domain`: `v2.4.1+rs.1` - official v2.4.1 and retained v2.4.0 client public E2E: success - eight uvm expose units upgraded to official v2.4.1 and active - rollback containers removed after verification - local and remote preserved raw bearer scans: zero - release note: https://code.rly.best/gofix/portal-tunnel-rs/releases/tag/v2.4.1+rs.1
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gofix/portal-tunnel-rs!93
No description provided.