Skip to content

[mono-move] Migrate from using the old type representation to the new one#19530

Merged
vineethk merged 9 commits intomainfrom
vk/migrate-type-representation
Apr 24, 2026
Merged

[mono-move] Migrate from using the old type representation to the new one#19530
vineethk merged 9 commits intomainfrom
vk/migrate-type-representation

Conversation

@vineethk
Copy link
Copy Markdown
Contributor

@vineethk vineethk commented Apr 22, 2026

Description

Until now, the specializer operated on a placeholder (old) type representation. The real, canonical runtime type model lived in mono-move-global-context. Lowered IR carried raw file-format indices (StructDefinitionIndex, StructDefInstantiationIndex, etc.) that would need to be re-resolved at runtime against the loader's real type graph.

This PR closes that gap. The specializer now produces IR that references the same interned Type pointers the runtime uses, end-to-end.

Some key changes:

  • Type moves from global-context into mono-move-core. Core now owns the runtime type model (types.rs, InternedType, InternedTypeList) so both the specializer and global-context can depend on it without the specializer having to depend on global-context internals or on move-vm-types.
  • stackless_exec_ir::Instr carries InternedType instead of file-format indices. Pack/Unpack/PackVariant/Exists/MoveFrom/... now hold resolved interned struct and enum types (plus an InternedTypeList for generic instantiations) rather than per-module StructDefinitionIndex handles. Pointer equality of these handles is structural equality.
  • type_conversion.rs stops being a placeholder. It delegates to a shared walk_sig_token helper in global-context via a small StructResolver trait, so specializer and global-context share one signature-token walker instead of maintaining two copies.
  • New mono-move-orchestrator crate. Pipeline orchestration (resolve types → run specializer → assemble Executable) is split out of specializer. This keeps the specializer a pure IR transform and gives us a clean seam for future passes (monomorphization, GC safe-point layout, etc.).
  • Dependency cleanup. global-context no longer depends on specializer or move-vm-types; specializer no longer depends on move-vm-types or move-asm.

Out of scope:

  • full generic struct/enum instantiation interning and its consequences
  • transitive loading of non-local struct types

How Has This Been Tested?

Existing masm/ and move/ golden test suites cover the pipeline end-to-end; .exp changes in this PR are driven by the switch to interned-type.

The test layout was reorganized to follow the new crate boundaries — tests live with the crate whose seam they actually exercise, not with the crate whose internals used to drive the pipeline.

End-to-end .masm / .move test corpus moved specializer/ → orchestrator/. The golden-file suite (the masm_runner / move_runner datatest harness in tests/testsuite.rs plus all tests/test_cases/masm/.{masm,exp} and tests/test_cases/move/.{move,exp}) now lives under orchestrator/tests/. That crate is the one that actually drives the full pipeline (resolve types → specialize → assemble Executable), so the E2E baselines belong there. The specializer crate, which is now a pure IR transform, no longer has its own test binary.

Type-interner unit tests moved global-context/ → orchestrator/. types_tests.rs moved alongside the E2E suite. This is a pragmatic consequence of the Type relocation: the interner is still implemented in global-context, but exercising it end-to-end — interning types produced by resolving real compiled modules — now requires the orchestrator to stitch core, global-context, and specializer together. Pure in-memory interner tests that don't need a module could move back to global-context later.

Gas integration test moved global-context/ → testsuite/. gas_test.rs relocated to testsuite/tests/, matching the broader pattern of cross-crate integration tests living in the shared testsuite crate.


Note

Medium Risk
Touches core IR/type representations and refactors the module-loading/specialization pipeline across multiple crates, so regressions could surface as incorrect type/layout resolution or lowering failures. Changes are internal but wide-reaching and involve unsafe arena pointer usage and new interning APIs.

Overview
Moves the canonical runtime type model into mono-move-core (types.rs) and updates executables to store InternedType/InternedTypeList plus struct/enum metadata, enabling pointer-stable type identity end-to-end.

Refactors mono-move-global-context to re-export core types, add public type-interning helpers (e.g. intern_*, type_data), and share signature-token walking via a new walk_sig_token + StructResolver seam; executable caching now consumes mono-move-core::Executable.

Introduces a new mono-move-orchestrator crate that resolves module types, runs the specializer, patches call sites, and assembles Executables; the previous executable builder is removed from global-context, the mseir-compiler CLI and golden tests are moved under orchestrator, and specializer sheds CLI/tests and extra deps while updating passes (e.g. slot allocation) to carry interned types.

Reviewed by Cursor Bugbot for commit c7d6184. Bugbot is set up for automated code reviews on this repo. Configure here.

@vineethk vineethk changed the title Migrate from using the old type representation to the new one [mono-move] Migrate from using the old type representation to the new one Apr 22, 2026
@vineethk vineethk force-pushed the vk/migrate-type-representation branch from 8ea5c74 to b19ae09 Compare April 22, 2026 15:58
@vineethk vineethk marked this pull request as ready for review April 22, 2026 16:15
@vineethk vineethk requested a review from a team as a code owner April 22, 2026 16:15
@vineethk vineethk requested review from calintat, georgemitenkov and vgao1996 and removed request for a team April 22, 2026 16:16
Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Differential Security Review — PR #19530: Migrate to new type representation

Overall risk: Low. This is a compiler-internal refactor (mono-move specializer/orchestrator), well-isolated from on-chain execution paths. The main findings are a latent frame-layout correctness bug and a panic on valid generic Move bytecode, both in the experimental compiler pipeline.


Scope

Codebase size: MEDIUM (62 changed files, ~10 Rust source files with substantive logic changes). Strategy: FOCUSED — full analysis on high-risk changed files, surface scan on mechanical changes.

Changed subsystems: mono-move/core, mono-move/global-context, mono-move/specializer, mono-move/orchestrator. All experimental compiler-pipeline code, not deployed on-chain execution paths (aptos-vm, move-vm, consensus, storage, mempool — none touched).

Summary of findings: 2 findings (1 MEDIUM, 1 LOW), plus 2 notes in test coverage / recommendations.


Findings

[MEDIUM] args_size excludes inter-parameter alignment padding

File: third_party/move/mono-move/specializer/src/pipeline.rs:37–40
Blast radius: 1 call site (build_executable via destack_and_lower_module)
Test coverage: Untested for mixed-alignment parameters

Description: args_size is computed as the sum of individual parameter slot sizes:

let args_size = ctx.home_slots[..func_ir.num_params as usize]
    .iter()
    .map(|s| s.size as usize)
    .sum::<usize>();

layout_slots (introduced in this PR, lower/context.rs:130–145) now inserts alignment padding between slots via align_up(offset, alignment). For a parameter list that includes type pairs of differing alignment — e.g., a bool (1-byte) followed by a u128 (16-byte) — the second parameter starts at an offset that is not sum(previous sizes), so args_size < actual_end_of_args.

The runtime uses args_size as the start of the zero-initialization range on frame entry (when zero_frame is true):

// interpreter.rs:682
let zero_size = callee.extended_frame_size - callee.args_size;
std::ptr::write_bytes(new_fp.add(callee.args_size), 0, zero_size);

With args_size < actual_end_of_args, write_bytes zeroes bytes inside the argument area that the caller already wrote, corrupting the tail portion of the argument region.

Historical context: This padding was not present in the pre-PR lower/context.rs, which accumulated size linearly with no alignment gaps. The introduction of layout_slots created the inconsistency.

Concrete impact: zero_frame is currently always set to false in the orchestrator (builder.rs:150), so this path is not executed today and no argument corruption occurs in the current code. The bug becomes active as soon as zero_frame: true is wired in for GC-safe functions (which is the documented intent). The correct formula is home_slots[num_params-1].offset + home_slots[num_params-1].size for a non-empty param list, or 0 for a zero-param function.


[LOW] todo! panic on modules with generic struct definitions

File: third_party/move/mono-move/orchestrator/src/builder.rs:202
Blast radius: All callers of build_executable / resolve_types
Test coverage: Not exercised by the test suite (no generic-struct test cases)

Description: resolve_struct_def panics unconditionally when the struct handle has type parameters:

if !handle.type_parameters.is_empty() {
    todo!("Generic structs / enums not yet supported");
}

resolve_types iterates all struct defs unconditionally; there is no pre-filter. Any compiled Move module containing a generic struct (e.g., struct Pair<T, U>) triggers this panic during type resolution. The Move standard library contains many generic structs; a pipeline that compiles standard-library-dependent modules will panic.

Concrete impact: This is a compiler-pipeline crash on valid Move bytecode, not an on-chain or consensus path. It is a development-completeness issue rather than a security issue. Still worth tracking explicitly as it will surface when modules with generics are added to the test suite.


Test Coverage Analysis

Changed Area Coverage Note
layout_slots with mixed-alignment types Untested All test cases use u64/primitives with uniform 8-byte alignment
intern_struct_type with pre-existing entry (dedup path) Untested Double-allocation is harmless but the dedup path has no test
walk_sig_token / TypeInternerKey for TypeParam Partially tested Indirectly tested via type-param interning; no direct round-trip test
Generic struct resolution (resolve_struct_def) Untested todo! path never reached

Coverage assessment: The new layout_slots alignment logic is only exercised with same-size types; the correctness of args_size under mixed alignment has no coverage.


Blast Radius

Changed Function Non-Test Callers Classification
translate_module 1 (destack) LOW
SsaConverter::struct_type / struct_inst_type ~20 call sites within ssa_conversion.rs MEDIUM (all internal)
intern_struct_type / intern_enum_type 1 (resolve_struct_def) LOW
layout_slots 2 (try_build_context_inner) LOW

All blast radius is contained within the mono-move compiler pipeline; no callers in aptos-vm, move-vm-runtime, or any on-chain execution path.


Notes

  • &'static lifetime laundering (core/src/types.rs:109–125): view_type(), view_type_list(), view_name() return &'static references from arena memory. This is intentional (lifetime cannot be expressed in Rust) and well-documented, but it is convention-enforced rather than type-enforced. A stored reference surviving an arena reset would be undefined behavior. The comment is correct; the API should be used only within the execution-phase scope.

  • Recursive type interning (context/types.rs TypeInternerKey::hash, sig_walk.rs walk_sig_token): Both are marked // TODO: non-recursive implementation. Recursion depth is bounded at ~256 for bytecode-deserialized tokens (enforced by SIGNATURE_TOKEN_DEPTH_MAX in the binary-format deserializer). No stack overflow risk for standard Move modules.

  • SignatureTokenKey / TypeInternerKey hash consistency: The two key types hash struct/enum identity using structural string content (address, module name, struct name), not pointer values. Correctness depends on ExecutableId being constructed with the same string values as struct_info_at's module metadata lookup. This invariant holds for the current builder path but is not type-enforced.


Recommendations

Before enabling zero_frame: true

  • Fix args_size in pipeline.rs:37–40: replace sum of sizes with last_param_slot.offset + last_param_slot.size (handle the zero-param case with 0).

Before adding generic-struct support

  • Replace todo!("Generic structs / enums not yet supported") in builder.rs:202 with a proper bail! that returns Err rather than panicking, so callers can handle the unsupported case gracefully.

Test coverage

  • Add a test case with mixed-alignment parameters (e.g., bool + u128) to cover the layout_slots alignment behavior and args_size computation.
  • Add a test case for a module with a generic struct to exercise the todo! path explicitly (confirming it errors cleanly once the todo! is converted to bail!).
Open in Web View Automation 

Sent by Cursor Automation: Security Review Bot

Comment thread third_party/move/mono-move/specializer/src/pipeline.rs Outdated
Comment thread third_party/move/mono-move/orchestrator/src/builder.rs Outdated
Comment thread third_party/move/mono-move/core/src/executable.rs
Comment thread third_party/move/mono-move/core/src/types.rs
Comment thread third_party/move/mono-move/global-context/src/context.rs
Comment thread third_party/move/mono-move/global-context/src/context.rs Outdated
Comment thread third_party/move/mono-move/global-context/src/context.rs Outdated
@vineethk vineethk force-pushed the vk/eliminate-types-in-op-stack branch from 3a2d33e to 796284c Compare April 22, 2026 18:00
@vineethk vineethk force-pushed the vk/migrate-type-representation branch from b19ae09 to 4542ba1 Compare April 22, 2026 18:00
@vineethk vineethk force-pushed the vk/eliminate-types-in-op-stack branch from 796284c to 6223347 Compare April 22, 2026 21:24
@vineethk vineethk force-pushed the vk/migrate-type-representation branch from 4542ba1 to c689658 Compare April 22, 2026 21:24
Base automatically changed from vk/eliminate-types-in-op-stack to main April 22, 2026 22:05
Comment thread third_party/move/mono-move/orchestrator/src/lib.rs
Comment thread third_party/move/mono-move/orchestrator/tests/testsuite.rs Outdated
Comment thread third_party/move/mono-move/orchestrator/tests/testsuite.rs
Comment thread third_party/move/mono-move/specializer/src/destack/mod.rs
Comment thread third_party/move/mono-move/specializer/src/stackless_exec_ir/mod.rs
Comment thread third_party/move/mono-move/specializer/src/stackless_exec_ir/mod.rs
Comment thread third_party/move/mono-move/specializer/src/lower/context.rs Outdated
Comment thread third_party/move/mono-move/specializer/src/destack/instr_utils.rs
Comment thread third_party/move/mono-move/specializer/src/destack/translate.rs Outdated
Comment thread third_party/move/mono-move/specializer/src/destack/translate.rs
Comment thread third_party/move/mono-move/specializer/src/destack/slot_alloc.rs Outdated
Comment thread third_party/move/mono-move/global-context/src/context/sig_walk.rs
@vineethk vineethk force-pushed the vk/migrate-type-representation branch from c689658 to 2bfb8db Compare April 24, 2026 00:35
@vineethk vineethk requested a review from georgemitenkov April 24, 2026 00:36
@vineethk
Copy link
Copy Markdown
Contributor Author

@georgemitenkov addressed comments, PTAL

Copy link
Copy Markdown
Contributor

@calintat calintat left a comment

Choose a reason for hiding this comment

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

LGTM, just some minor comments (feel free to ignore).

Comment thread third_party/move/mono-move/core/src/executable.rs Outdated
Comment thread third_party/move/mono-move/core/src/executable.rs
Comment thread third_party/move/mono-move/orchestrator/src/builder.rs Outdated
@vineethk vineethk enabled auto-merge (squash) April 24, 2026 15:35
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions
Copy link
Copy Markdown
Contributor

✅ Forge suite compat success on ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6

Compatibility test results for ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6 (PR)
1. Check liveness of validators at old version: ca049383dd80675149ef2d0042668964f9f9107a
compatibility::simple-validator-upgrade::liveness-check : committed: 14284.72 txn/s, latency: 2432.79 ms, (p50: 2500 ms, p70: 2700, p90: 3100 ms, p99: 3900 ms), latency samples: 468020
2. Upgrading first Validator to new version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6
compatibility::simple-validator-upgrade::single-validator-upgrade : committed: 6232.88 txn/s, latency: 5404.30 ms, (p50: 6000 ms, p70: 6100, p90: 6300 ms, p99: 6400 ms), latency samples: 215280
3. Upgrading rest of first batch to new version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6
compatibility::simple-validator-upgrade::half-validator-upgrade : committed: 1916.78 txn/s, submitted: 2180.79 txn/s, expired: 264.01 txn/s, latency: 5697.60 ms, (p50: 6000 ms, p70: 6000, p90: 7200 ms, p99: 12100 ms), latency samples: 168018
4. upgrading second batch to new version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6
compatibility::simple-validator-upgrade::rest-validator-upgrade : committed: 10710.14 txn/s, latency: 3037.58 ms, (p50: 3200 ms, p70: 3300, p90: 3500 ms, p99: 3700 ms), latency samples: 357040
5. check swarm health
Compatibility test for ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6 passed
Test Ok

@github-actions
Copy link
Copy Markdown
Contributor

✅ Forge suite realistic_env_max_load success on c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6

two traffics test: inner traffic : committed: 14178.36 txn/s, latency: 1268.08 ms, (p50: 1200 ms, p70: 1300, p90: 1600 ms, p99: 2200 ms), latency samples: 5294160
two traffics test : committed: 99.99 txn/s, latency: 757.69 ms, (p50: 700 ms, p70: 800, p90: 900 ms, p99: 1200 ms), latency samples: 1740
Latency breakdown for phase 0: ["MempoolToBlockCreation: max: 0.528, avg: 0.477", "ConsensusProposalToOrdered: max: 0.147, avg: 0.136", "ConsensusOrderedToCommit: max: 0.261, avg: 0.239", "ConsensusProposalToCommit: max: 0.403, avg: 0.375"]
Max non-epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 0.72s no progress at version 4907586 (avg 0.07s) [limit 15].
Max epoch-change gap was: 0 rounds at version 0 (avg 0.00) [limit 4], 0.36s no progress at version 1172826 (avg 0.35s) [limit 16].
Test Ok

@github-actions
Copy link
Copy Markdown
Contributor

✅ Forge suite framework_upgrade success on ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6

Forge report malformed: Expecting property name enclosed in double quotes: line 4 column 1 (char 23)
'{\n  "metrics": [\n    {\n[2026-04-24T17:04:03Z INFO  aptos_forge::report] Test Ok\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "submitted_txn",\n      "value": 208441.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "expired_txn",\n      "value": 640.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "avg_tps",\n      "value": 2282.227073234506\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "avg_latency",\n      "value": 1276.2010721796335\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p50_latency",\n      "value": 1200.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p90_latency",\n      "value": 1800.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p99_latency",\n      "value": 2400.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "submitted_txn",\n      "value": 206742.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "expired_txn",\n      "value": 1000.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "avg_tps",\n      "value": 2259.781648218539\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "avg_latency",\n      "value": 1336.3645147806476\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p50_latency",\n      "value": 1200.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p90_latency",\n      "value": 1800.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p99_latency",\n      "value": 8800.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "submitted_txn",\n      "value": 218640.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "expired_txn",\n      "value": 460.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "avg_tps",\n      "value": 2401.381015753385\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "avg_latency",\n      "value": 1223.6497845815381\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p50_latency",\n      "value": 1200.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p90_latency",\n      "value": 1500.0\n    },\n    {\n      "test_name": "framework_upgrade::framework-upgrade::full-framework-upgrade",\n      "metric": "p99_latency",\n      "value": 2400.0\n    }\n  ],\n  "text": "Compatibility test results for ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6 (PR)\\nUpgrade the nodes to version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6\\nframework_upgrade::framework-upgrade::full-framework-upgrade : committed: 2282.23 txn/s, submitted: 2289.26 txn/s, failed submission: 7.03 txn/s, expired: 7.03 txn/s, latency: 1276.20 ms, (p50: 1200 ms, p70: 1500, p90: 1800 ms, p99: 2400 ms), latency samples: 207801\\nframework_upgrade::framework-upgrade::full-framework-upgrade : committed: 2259.78 txn/s, submitted: 2270.77 txn/s, failed submission: 10.98 txn/s, expired: 10.98 txn/s, latency: 1336.36 ms, (p50: 1200 ms, p70: 1400, p90: 1800 ms, p99: 8800 ms), latency samples: 205742\\n5. check swarm health\\nCompatibility test for ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6 passed\\nUpgrade the remaining nodes to version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6\\nframework_upgrade::framework-upgrade::full-framework-upgrade : committed: 2401.38 txn/s, submitted: 2406.44 txn/s, failed submission: 5.06 txn/s, expired: 5.06 txn/s, latency: 1223.65 ms, (p50: 1200 ms, p70: 1200, p90: 1500 ms, p99: 2400 ms), latency samples: 218180\\nTest Ok"\n}'
Trailing Log Lines:
Compatibility test results for ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6 (PR)
Upgrade the nodes to version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 2282.23 txn/s, submitted: 2289.26 txn/s, failed submission: 7.03 txn/s, expired: 7.03 txn/s, latency: 1276.20 ms, (p50: 1200 ms, p70: 1500, p90: 1800 ms, p99: 2400 ms), latency samples: 207801
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 2259.78 txn/s, submitted: 2270.77 txn/s, failed submission: 10.98 txn/s, expired: 10.98 txn/s, latency: 1336.36 ms, (p50: 1200 ms, p70: 1400, p90: 1800 ms, p99: 8800 ms), latency samples: 205742
5. check swarm health
Compatibility test for ca049383dd80675149ef2d0042668964f9f9107a ==> c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6 passed
Upgrade the remaining nodes to version: c7d6184faaaed57041d5ce8c18d28c1a9e81fcb6
framework_upgrade::framework-upgrade::full-framework-upgrade : committed: 2401.38 txn/s, submitted: 2406.44 txn/s, failed submission: 5.06 txn/s, expired: 5.06 txn/s, latency: 1223.65 ms, (p50: 1200 ms, p70: 1200, p90: 1500 ms, p99: 2400 ms), latency samples: 218180
Test Ok

=== BEGIN JUNIT ===
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="forge" tests="1" failures="0" errors="0" uuid="36ba8dfc-e45e-4f5b-a73e-f452718c3ed1">
    <testsuite name="local" tests="1" disabled="0" errors="0" failures="0">
        <testcase name="framework_upgrade::framework-upgrade">
        </testcase>
    </testsuite>
</testsuites>
=== END JUNIT ===
[2026-04-24T17:04:03Z INFO  aptos_forge::backend::k8s::cluster_helper] Deleting namespace forge-framework-upgrade-pr-19530: Some(NamespaceStatus { conditions: None, phase: Some("Terminating") })
[2026-04-24T17:04:03Z INFO  aptos_forge::backend::k8s::cluster_helper] aptos-node resources for Forge removed in namespace: forge-framework-upgrade-pr-19530
[2026-04-24T17:04:03Z INFO  ureq::unit] sending request POST http://vmagent-victoria-metrics-agent.victoria-metrics.svc:8429/api/v1/import/prometheus

test result: ok. 1 passed; 0 soft failed; 0 hard failed; 0 filtered out

Debugging output:
NAME                                         READY   STATUS      RESTARTS   AGE
aptos-node-0-validator-0                     1/1     Running     0          12m
aptos-node-1-validator-0                     1/1     Running     0          12m
aptos-node-2-validator-0                     1/1     Running     0          2m56s
aptos-node-3-validator-0                     1/1     Running     0          2m22s
forge-testnet-deployer-xc2l6                 0/1     Completed   0          17m
genesis-aptos-genesis-eforge10a4012e-smhx9   0/1     Completed   0          16m

@vineethk vineethk merged commit 4e205c0 into main Apr 24, 2026
59 checks passed
@vineethk vineethk deleted the vk/migrate-type-representation branch April 24, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants