Skip to content

refactor!: retire the migration cadence surface end to end - #1242

Draft
zancas wants to merge 2 commits into
devfrom
cadence_retirement
Draft

refactor!: retire the migration cadence surface end to end#1242
zancas wants to merge 2 commits into
devfrom
cadence_retirement

Conversation

@zancas

@zancas zancas commented Jul 29, 2026

Copy link
Copy Markdown
Member

First arc of the nym_linear sub-PR stack (the linearized feat/nym, PR #1207). This PR retires the migration cadence surface end to end and moves the zingolib pin to the mobile stack's settled branch.

The ZIP 318 Poisson schedule in zingolib draws every broadcast delay itself, so the per-window cadence choice is a control that always refuses. Dev still offers it at every layer. This removes the surface: in Rust, reschedule_parts and the app's MigrationCadenceFixed error are gone, the status JSON drops per_bucket, and the error funnel maps the mixnet-refusal variants the upstream work introduced. The uniffi UDL and the checked-in Kotlin binding are regenerated, the Android and iOS bridge methods follow with their outcome-table tests. In the app, the MigrationCadence chooser screen is deleted, splitting completion navigates straight to the schedule review, progress counts parts directly, the status types adopt the wake-point vocabulary, and the migrationcadence translation blocks leave all five languages.

Two findings from the breakout shaped the commit. The cadence API itself survives in zingolib (CadenceFixed, the per_bucket: Option<u32> argument), so the FFI passes None and maps the variant for exhaustiveness only. And dev's zingolib lock (3d2f2aa0, the #2527 merge) predates what this tree builds on, so the pin moves to indexer_census at ba03ec07, the same settled pair nym_linear's tip uses; the pin comment records the conflict policy from the pin collaboration protocol in docs/agents/nym-diagnostics-plan.md. This advance also satisfies the "lock ≥ 3d2f2aa0" criterion from the ironwood lock-lag ledger red.

Verified locally: cargo check and clippy clean against the new pin, tsc clean, the migration-area jest suites pass (25 tests), and the retaken History snapshots are byte-identical to the feat/nym tree's.

🤖 Generated with Claude Code

The ZIP 318 Poisson schedule in zingolib draws every broadcast delay
itself, so the per-window cadence choice is a control that always
refuses. This removes the surface that offered it, across every layer.

The zingolib pin moves from upstream dev (3d2f2aa0) to the mobile
stack's settled branch, indexer_census (ba03ec07), and the lock is
settled to match. Upstream dev still lacks the mobile-adoption work
this tree builds on; the pin comment records the conflict policy from
the pin collaboration protocol. In the FFI the cadence API survives
shape-stably where zingolib still exposes it: start_ironwood_migration
passes per_bucket as None and the retired CadenceFixed variant is
mapped for exhaustiveness only.

In Rust, reschedule_parts and the app's MigrationCadenceFixed error are
gone, the status JSON drops per_bucket, and the error funnel maps the
mixnet-refusal variants the same upstream work introduced
(MixnetNotReady, NoEligibleBroadcastIndexer,
MigrationBroadcastTargetIsSyncEndpoint). The uniffi UDL and the
checked-in Kotlin binding are regenerated to match, the Android and iOS
bridge methods follow, and so do their outcome-table tests.

In the app, the MigrationCadence chooser screen is deleted and
splitting completion navigates straight to the schedule review.
Progress counts parts directly on the status screen and the history
banner, since each part now has its own drawn window. The status types
adopt the wake-point vocabulary (RPCWakePointType), the dev-era
BlockTime constants and the split-report types leave with their tests,
and the migrationcadence translation blocks are removed from all five
languages. The History snapshots are retaken; they land byte-identical
to the feat/nym tree's.

Verified locally: cargo check and clippy clean against the new pin,
tsc clean, the migration-area jest suites pass (25 tests), and the
retaken snapshots match nym_linear exactly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@zancas
zancas marked this pull request as draft July 29, 2026 05:41
… cadence surface

The retirement commit updated the UDL, RPCModule.kt, the TS layer, and
the Swift bridge, but left the checked-in zingo.kt at the cadence era:
it still declared startIronwoodMigration(planHashHex, perBucket) and
rescheduleParts(perBucket). The fast Kotlin compile and the JVM tests
copy that file verbatim, so RPCModule.kt's one-argument call (correct
per the new UDL) failed with "No value passed for parameter perBucket"
and every Android job dominoed, the native build's Cargo NDK step being
fail-fast cancelled rather than failing itself. Same root cause and
same fix as on #1225 and the hardening branch: regenerate with the
lib's uniffi-bindgen (cargo run --features=uniffi/cli --bin
uniffi-bindgen generate ./src/zingo.udl --language kotlin --out-dir
./src). The cadence surface leaves the bindings, 125 lines gone, and
no hand edits anywhere.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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