Skip to content

Modernization Phase 2.5: trackerless-network modules + final façade-stage metrics [iosbuild] [androidbuild] - #33

Merged
ptesavol merged 4 commits into
mainfrom
modernize/2.5-tn
Jul 3, 2026
Merged

ptesavol merged 4 commits into
mainfrom
modernize/2.5-tn

Conversation

@ptesavol

@ptesavol ptesavol commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

The migration surface is complete — every C++ package that exports an API now ships a module.

What's migrated

  • streamr-trackerless-network: :protos over the NetworkRpc trio — with a twist: NetworkRpc.proto declares no package, so the 22 messages + 4 enums live in the global namespace and export via plain export using ::X;, while the plugin-generated client/server stubs live in streamr::protorpc. Plus the coarse :all partition over all 13 public headers. All 12 test TUs flipped to import with zero fallout — the first package to flip cleanly on the first build.
  • streamr-libstreamrproxyclient: deliberately no module. Its C header streamrproxyclient.h is the permanent public ABI; the implementation TU keeps textual includes until consolidation (its internal LibProxyClientApi.hpp dies there anyway, and mixing import with an internal header that reaches every third-party stack would re-trigger the clangd false-ODR issue). Verified unchanged: 15/15 tests.
  • The Release gate from the 2.4 lesson is now standing procedure — tn built and tested in Release locally before this PR.

Final façade-stage metrics (vs the Phase 2.0 baselines, in MODERNIZATION.md)

Metric Baseline Final Target Verdict
Clean root build 102 s 78 s (−24 %) −25 % ✅ effectively met
SLogger.hpp touch 62–70 s 58 s −40 % ❌ consolidation work
StreamID.hpp touch 19 s 32 s −40 % ❌ regression (BMI-chain latency)

Honest reading: the clean-build target is met already at the façade stage. The incremental targets cannot be met by the façade alone — while headers remain the textual source of truth inside :all GMFs, any header touch invalidates the package BMI and cascades down the module DAG. Consolidation (2.6) — code into partitions, headers deleted — is where the incremental wins come from, and these numbers now quantify exactly why. That's the decision data for the 2.6 review.

Platform gates

  • iOS cross-build: this PR ([iosbuild]).
  • Android smoke: this PR ([androidbuild]) — per the phase plan. Note: this is the first Android CI build since the Phase 1.3 dependency wave, so any failure may be pre-existing staleness rather than modules fallout — will triage accordingly.

Next

Phase 2.6: the consolidation decision — with the full measurement story (façade wins + incremental gap) on the table.

🤖 Generated with Claude Code

…(iosbuild) (androidbuild)

- streamr-trackerless-network: :protos over the NetworkRpc trio (global-
  namespace messages/enums via export using ::X; plugin stubs in
  streamr::protorpc) + coarse :all over 13 public headers. All 12 test
  TUs flipped to import with zero fallout.
- streamr-libstreamrproxyclient: deliberately NO module — the C header
  is the permanent ABI; implementation TU stays textual until
  consolidation (its internal header dies there). 15/15 tests unchanged.
- 2 more constants -> inline constexpr. Release gate (2.4 lesson) green.

FINAL FACADE-STAGE METRICS (vs 2.0 baseline, recorded in
MODERNIZATION.md): clean 102s -> 78s (-24%, target -25%: effectively
met); SLogger touch 65s -> 58s; StreamID touch 19s -> 32s (BMI-chain
latency — the incremental targets are consolidation work, and the
numbers now quantify exactly why).

Verified: root 307/307; proxyclient 15/15; full lint; tn Release
build+test green. Android smoke gated via PR keyword (first Android
build since the dependency wave).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ptesavol and others added 2 commits July 3, 2026 20:48
…droid unsupported (iosbuild) (androidbuild)

First Android build since the 1.3 dependency wave failed at vcpkg install:
the new baseline's folly port excludes android in its supports expression.
Pre-existing latent breakage (unrelated to modules), exposed by this
phase's Android smoke gate. The monorepo built folly for arm64-android on
the old baseline; the overlay re-allows it (JUSTIFICATION.md updated).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s (iosbuild) (androidbuild)

The Android smoke (first since the dependency wave) got all the way
through vcpkg deps (folly-on-NDK builds with the relaxed supports) and
failed in our code: NDK clang 18/19's modules support is too immature —
import streamr.json fails to provide the toJson overload set (known
export-using overload bugs, fixed in newer clang).

Resolution: STREAMR_MODULES_SUPPORTED=OFF on Android in
StreamrModules.cmake. Libraries build textually from headers (which stay
the source of truth during the facade stage): streamr_add_module_library
falls back to STATIC + stub source so PUBLIC usage stays identical;
streamr_target_module_sources/streamr_enable_imports no-op. Test and
example targets (which import) are skipped on Android — they are never
executed there, and the shipping artifact (proxyclient .so) does not
import. Revisit when the NDK ships clang >= 22; consolidation (2.6)
requires it, noted in the helper.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lint is host-independent and already runs on both validate.yml Linux legs
and macOS. On an Android build tree the import-using test files are not
compiled (tests are skipped on Android — StreamrModules.cmake), so clangd
has no compile commands for them and emits spurious diagnostics. The iOS
workflow has never linted, for the same reason.

The install step (full Android library cross-build incl. folly-on-NDK)
remains the Android smoke gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the ci Pull requests that update Continuous Integration build label Jul 3, 2026
@ptesavol
ptesavol merged commit 70bb583 into main Jul 3, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Pull requests that update Continuous Integration build dht docs logger network proto-rpc utils

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant