Skip to content

Conversation

@iurii-ssv
Copy link
Contributor

@iurii-ssv iurii-ssv commented Aug 1, 2025

This PR is meant to improve logs so that they contain more complete data, as well as make logging more consistent across different duty types, for example:

  • we want more granular logging for every duty we have (to be able to split the duty up into a bunch of steps to isolate the exact step where some problem happens, and also to get the exact time it took to execute a particular step)
  • if we want to find out why a particular validator couldn't successfully attest in a particular slot - we could filter by slot + validator_idx, but we won't have any logs regarding whether or not we've submitted an attestation for that particular validator because we only log the total attestation-count submitted (which is not enough info to debug with)
  • this PR also adds/removes some log-fields to/from some log lines as well as rearranges some code to simplify logging, essentially clearing the ground for logs: duty_trace_id #1828

I've also re-arranged some spec-test files in this PR a bit to simplify the dependancies between them (not super relevant to logging, but I thought I might need that for some functionality in this PR to work ... ended up removing that functionality but keeping the re-arrangement of the file structure ... could move it to a separate PR but since it only affects tests there probably is no need).

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@iurii-ssv iurii-ssv marked this pull request as draft August 1, 2025 11:15
@codecov
Copy link

codecov bot commented Aug 1, 2025

Codecov Report

❌ Patch coverage is 62.50000% with 33 lines in your changes missing coverage. Please review.
✅ Project coverage is 57.0%. Comparing base (ef998ee) to head (6a8887c).
⚠️ Report is 1 commits behind head on stage.

Files with missing lines Patch % Lines
observability/log/fields/fields.go 0.0% 13 Missing ⚠️
cli/operator/node.go 0.0% 6 Missing ⚠️
ibft/storage/store.go 76.1% 5 Missing ⚠️
beacon/goclient/sync_committee_contribution.go 0.0% 3 Missing ⚠️
beacon/goclient/aggregator.go 0.0% 2 Missing ⚠️
ibft/storage/stores.go 60.0% 2 Missing ⚠️
api/handlers/exporter/decided.go 75.0% 1 Missing ⚠️
beacon/goclient/validator.go 0.0% 1 Missing ⚠️

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@iurii-ssv iurii-ssv force-pushed the logs-log-more-details-per-validator-slot-epoch branch from a194343 to b71146e Compare August 4, 2025 15:20
@iurii-ssv iurii-ssv changed the title logs: log more details per validator/slot/epoch duties: log more details Aug 4, 2025
@iurii-ssv iurii-ssv force-pushed the logs-log-more-details-per-validator-slot-epoch branch 3 times, most recently from d1d37a7 to 70c9e81 Compare August 7, 2025 11:00
y0sher
y0sher previously approved these changes Aug 10, 2025
Copy link
Contributor

@y0sher y0sher left a comment

Choose a reason for hiding this comment

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

lgtm

@iurii-ssv iurii-ssv force-pushed the logs-log-more-details-per-validator-slot-epoch branch 3 times, most recently from 8f3e8d6 to 33107aa Compare August 27, 2025 18:31
Comment on lines 426 to 425
go func(ctx context.Context) {
if duty.Type == spectypes.BNRoleAttester || duty.Type == spectypes.BNRoleSyncCommittee {
s.waitOneThirdOrValidBlock(duty.Slot)
}
recordDutyExecuted(ctx, duty.RunnerRole())
s.dutyExecutor.ExecuteDuty(ctx, duty)
}(ctx)
Copy link
Contributor Author

@iurii-ssv iurii-ssv Aug 27, 2025

Choose a reason for hiding this comment

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

Removing this if here because ExecuteDuties manages validator-based duties while BNRoleAttester and BNRoleSyncCommittee are committee-based duties (managed by ExecuteCommitteeDuties), so this is a dead code effectively at this point

@iurii-ssv iurii-ssv marked this pull request as ready for review August 29, 2025 07:12
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

Greptile Summary

This PR implements comprehensive logging improvements across the SSV codebase to provide more granular and consistent duty tracing capabilities. The changes focus on two main areas:

Logging Enhancements:

  • Added logger parameters to base message processing methods (basePreConsensusMsgProcessing, baseConsensusMsgProcessing, basePostConsensusMsgProcessing) to enable structured logging with proper context throughout duty execution
  • Implemented detailed timing measurements across duty phases (pre-consensus, consensus, post-consensus) with new fields like Took replacing generic SubmissionTime
  • Added comprehensive duty completion logging with timing breakdowns for all runner types (proposer, aggregator, committee, sync committee)
  • Enhanced event logging with more specific descriptions and validator-specific information to enable filtering by slot + validator index
  • Standardized logging patterns across different duty types, preparing the foundation for duty trace ID implementation (issue #1828)

Code Organization:

  • Consolidated storage interfaces by moving QBFT storage functionality from protocol/v2/qbft/storage to ibft/storage, updating imports throughout the codebase
  • Reorganized spec test files and moved testing utilities to reduce inter-package dependencies
  • Inlined event message processing in validator components, replacing abstract handleEventMessage calls with explicit type-specific handling
  • Exported ParticipantStorage struct and moved utility functions like GetSpecDir to more appropriate packages

The changes maintain backward compatibility while establishing consistent logging infrastructure that will support future duty tracing improvements. The timing enhancements and validator-specific logging enable operators to debug specific duty failures by filtering logs with precise criteria.

Confidence score: 4/5

  • This PR introduces significant logging improvements with minimal risk to core functionality, though some timing logic changes require attention
  • Score reflects mostly safe refactoring with well-structured logging enhancements, but includes one behavioral change that could affect duty execution timing
  • Pay close attention to operator/duties/scheduler.go where duty waiting logic was moved and could impact validator performance

Context used:

Rule - Prefer shorter, clearer names for methods and constants. If one condition implies another (e.g., attesting implies participating), use the more specific name rather than combining both concepts. (link)

46 files reviewed, 2 comments

Edit Code Review Bot Settings | Greptile

@iurii-ssv iurii-ssv force-pushed the logs-log-more-details-per-validator-slot-epoch branch from 0ced541 to 80f51e5 Compare August 29, 2025 07:14
@iurii-ssv iurii-ssv marked this pull request as draft September 24, 2025 08:48
@iurii-ssv iurii-ssv force-pushed the logs-log-more-details-per-validator-slot-epoch branch from 20ccfa3 to 8adc3ec Compare September 25, 2025 10:05
@iurii-ssv iurii-ssv marked this pull request as ready for review September 25, 2025 10:06
@iurii-ssv iurii-ssv requested review from a team as code owners September 25, 2025 10:06
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

Greptile Overview

Summary

This PR enhances logging throughout the SSV duty execution pipeline to improve observability and debugging capabilities. The changes focus on three main areas:

Consistency Improvements:

  • Standardizes logging patterns across all duty types (proposer, aggregator, committee, sync committee contribution, validator registration, voluntary exit)
  • Introduces consistent event naming conventions using const declarations for log messages and span events
  • Adds structured fields through the fields package for better log parsing and filtering

Granular Timing Measurements:

  • Implements detailed timing measurements for pre-consensus, consensus, and post-consensus phases
  • Adds duration tracking for beacon API calls, block fetching, and submission operations
  • Provides comprehensive duty lifecycle timing from start to completion

Enhanced Debugging Support:

  • Adds more detailed logging at key decision points in the duty execution flow
  • Includes timing information (fields.Took()) for operations that could impact performance
  • Maintains consistent logging structure to support the planned duty trace ID feature (#1828)

The changes are well-structured and follow existing patterns in the codebase. All modifications maintain the current logging levels and don't introduce performance overhead. The PR also includes minor spec test file reorganization to simplify dependencies, though this doesn't affect the main functionality.

Confidence Score: 5/5

  • This PR is safe to merge with no risk
  • Score of 5 reflects that this is a purely observability enhancement with no functional changes to core logic. All modifications are additive logging improvements that follow established patterns and don't alter execution paths or introduce new dependencies.
  • No files require special attention

Important Files Changed

File Analysis

Filename        Score        Overview
protocol/v2/ssv/runner/sync_committee_contribution.go 5/5 Enhanced logging with timing measurements and granular duty processing steps. No logical issues detected.
protocol/v2/ssv/runner/runner.go 5/5 Base runner improvements with consistent event naming and improved observability spans. Code is well-structured.
protocol/v2/ssv/runner/proposer.go 5/5 Improved logging with timing measurements and more detailed event tracking for block proposal process. Changes look solid.
protocol/v2/ssv/runner/aggregator.go 5/5 Enhanced logging consistency with detailed timing measurements and improved event descriptions. Implementation is clean.
observability/log/fields/fields.go 5/5 Adds consistent field definitions for structured logging across duty types. No issues with field implementations.
protocol/v2/ssv/runner/committee.go 5/5 Committee runner enhanced with detailed logging and measurement tracking for better observability. Code quality is good.
protocol/v2/ssv/validator/validator.go 5/5 Enhanced event logging for duty processing with improved observability spans and timing measurements.

Sequence Diagram

sequenceDiagram
    participant Scheduler as Duty Scheduler
    participant Runner as Duty Runner
    participant Logger as Enhanced Logger
    participant Beacon as Beacon Node
    participant Network as P2P Network

    Note over Scheduler,Network: Enhanced Logging Flow for Duty Processing

    Scheduler->>Runner: StartNewDuty(duty, quorum)
    Runner->>Logger: Log "starting duty processing" with timing
    
    Note over Runner,Logger: Pre-Consensus Phase
    Runner->>Runner: StartPreConsensus() measurement
    Runner->>Network: Broadcast partial signature
    Runner->>Logger: Log signature broadcast with event details
    Network->>Runner: Receive partial signatures from peers
    Runner->>Logger: Log "got partial signatures" with signer info
    Runner->>Runner: Check for quorum
    alt Quorum achieved
        Runner->>Logger: Log "got pre consensus quorum" event
        Runner->>Runner: EndPreConsensus() measurement
        Runner->>Logger: Log timing with fields.PreConsensusTime()
    end

    Note over Runner,Beacon: Beacon Node Interaction (Proposer Example)
    Runner->>Beacon: GetBeaconBlock() with timing
    Beacon->>Runner: Return block data
    Runner->>Logger: Log block details (hash, fee_recipient, took duration)

    Note over Runner,Logger: Consensus Phase
    Runner->>Runner: StartConsensus() measurement
    Runner->>Runner: QBFT consensus processing
    alt Consensus decided
        Runner->>Logger: Log "QBFT instance is decided" event
        Runner->>Runner: EndConsensus() measurement
        Runner->>Logger: Log consensus timing
    end

    Note over Runner,Logger: Post-Consensus Phase
    Runner->>Runner: StartPostConsensus() measurement
    Runner->>Network: Broadcast post-consensus partial sig
    Network->>Runner: Receive post-consensus signatures
    alt Quorum achieved
        Runner->>Logger: Log "got post consensus quorum"
        Runner->>Runner: EndPostConsensus() measurement
        Runner->>Beacon: Submit to beacon chain with timing
        alt Submission successful
            Runner->>Logger: Log "successfully submitted" with took duration
            Runner->>Runner: EndDutyFlow() measurement
            Runner->>Logger: Log final duty summary with all phase timings
        else Submission failed
            Runner->>Logger: Log error with took duration and error details
        end
    end

    Note over Runner,Logger: Comprehensive Timing Output
    Runner->>Logger: Final log with PreConsensusTime, ConsensusTime, PostConsensusTime, TotalDutyTime
Loading

54 files reviewed, no comments

Edit Code Review Agent Settings | Greptile

@iurii-ssv iurii-ssv force-pushed the logs-log-more-details-per-validator-slot-epoch branch from 8adc3ec to a3d6730 Compare September 26, 2025 10:23
Comment on lines 73 to 96
// Start is an interface implementation
func (i *Instance) Start(ctx context.Context, logger *zap.Logger, value []byte, height specqbft.Height) {
i.startOnce.Do(func() {
_, span := tracer.Start(ctx,
observability.InstrumentName(observabilityNamespace, "qbft.instance.start"),
trace.WithAttributes(observability.BeaconSlotAttribute(phase0.Slot(height))))
defer span.End()

i.StartValue = value
i.bumpToRound(specqbft.FirstRound)
i.State.Height = height
i.metrics.Start()
i.config.GetTimer().TimeoutForRound(height, specqbft.FirstRound)
Copy link
Contributor Author

@iurii-ssv iurii-ssv Sep 27, 2025

Choose a reason for hiding this comment

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

We don't need a startOnce thingy because we only start the Instance in Controller.StartNewInstance which checks whether or not the instance already exists before creating & starting it (which is how it actually should be done, using sync.Once is a hacky way to go about it)

@iurii-ssv
Copy link
Contributor Author

/test

@iurii-ssv
Copy link
Contributor Author

/test

@ssv-test-bot
Copy link

ssv-test-bot bot commented Sep 29, 2025

🔴 Test run for PR #2419

Branch: logs-log-more-details-per-validator-slot-epoch
Commit: a641687

Status

2025-09-29T07:54:34Z Starting test run
2025-09-29T07:54:35Z Test run submitted successfully for commit a641687
2025-09-29T07:56:09Z container image for commit a641687f35ee069a8b2f423701b05adbe43daec7 is build and present in container registry
2025-09-29T07:57:26Z commit a641687f35ee069a8b2f423701b05adbe43daec7 is deployed to ssv nodes 300,301,302,303
2025-09-29T07:58:07Z The test run failed with error

Result - 🔴 Failure

Click to expand executor logs
═══════════════════════════════════════════════════════════════════════════════════════════════════════
                🧪  WELCOME TO Executor - SSV's Distributed Test Automation Execution Layer  🧪            

                                  ___ __  __ ___  ___  _   _  _____  ___   ___ 
                                 | __|\ \/ /| __|/ __|| | | ||_   _|/ _ \ | _ \
                                 | _|  >  < | _|| (__ | |_| |  | | | (_) ||   /
                                 |___|/_/\_\|___|\___| \___/   |_|  \___/ |_|_\
                                        

═══════════════════════════════════════════════════════════════════════════════════════════════════════
{"time":"2025-09-29T07:57:27.918808004Z","level":"INFO","msg":"🐳 Docker mode: Using environment variables for config generation"}
{"time":"2025-09-29T07:57:27.931700675Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-29T07:57:27.931778603Z","level":"INFO","msg":"📝 Requesting configuration generation from orchestrator API","network":"hoodi_stage","clusters":[300,301,302,303],"tests":"(sanity)"}
{"time":"2025-09-29T07:57:27.991115778Z","level":"INFO","msg":"✅ Configuration generated successfully via API","resource_usage_id":"4bb68d1fcf69c5830c352e60a66d0f6e"}
{"time":"2025-09-29T07:57:27.991868386Z","level":"INFO","msg":"🚀 EXECUTOR Initialized Successfully"}
{"time":"2025-09-29T07:57:27.991916456Z","level":"INFO","msg":"⚙️ Test configuration loaded","network":"hoodi_stage","nodes":[300,301,302,303],"test_type":{"Sanity":{"ShouldRun":true,"E2M":false,"BulkAmount":0},"Bulk":{"ShouldRun":false,"E2M":false,"BulkAmount":0},"Isolated":{"Tests":null}}}
{"time":"2025-09-29T07:57:32.676389468Z","level":"INFO","msg":"Generated operator pubkeys file","module":"scanner","path":"/app/shared/data/operators/operator-pubkeys-hoodi_stage.json"}
{"time":"2025-09-29T07:57:32.676741551Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"consensus"}
{"time":"2025-09-29T07:57:32.676815789Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"flow-emits"}
{"time":"2025-09-29T07:57:32.676897483Z","level":"INFO","msg":"Validation client initialized","module":"main","loki_enabled":true,"e2m_enabled":false}
{"time":"2025-09-29T07:57:32.67697777Z","level":"INFO","msg":"🔑 KEY STEP: Starting Isolated Tests Concurrently if exists...","module":"main"}
{"time":"2025-09-29T07:57:32.677114098Z","level":"INFO","msg":"🔑 KEY STEP: Starting Sanity Test Suite","module":"main"}
{"time":"2025-09-29T07:57:32.677497884Z","level":"INFO","msg":"No isolated tests configured, skipping","module":"main"}
{"time":"2025-09-29T07:57:32.756190508Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":300}
{"time":"2025-09-29T07:57:32.773398029Z","level":"INFO","msg":"Available slots","test":"sanity","node":300,"slots":3000}
{"time":"2025-09-29T07:57:32.773512281Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":301}
{"time":"2025-09-29T07:57:32.78334526Z","level":"INFO","msg":"Available slots","test":"sanity","node":301,"slots":398}
{"time":"2025-09-29T07:57:32.783436531Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":302}
{"time":"2025-09-29T07:57:32.792266226Z","level":"INFO","msg":"Available slots","test":"sanity","node":302,"slots":297}
{"time":"2025-09-29T07:57:32.792352255Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":303}
{"time":"2025-09-29T07:57:32.79989561Z","level":"INFO","msg":"Available slots","test":"sanity","node":303,"slots":716}
{"time":"2025-09-29T07:58:02.892450877Z","level":"ERROR","msg":"❌ FAILURE: Sanity Test Suite Failed","module":"main","error":"nonce not found in output"}
{"time":"2025-09-29T07:58:02.892564876Z","level":"INFO","msg":"⏳ PROGRESS: Waiting for all tests to finish","module":"main"}
{"time":"2025-09-29T07:58:02.892666147Z","level":"ERROR","msg":"❌ FAILURE: Test Execution Completed with Failures","module":"main","passed_suites":null,"failed_suites":["sanity"],"skipped_suites":["isolated"]}
{"time":"2025-09-29T07:58:02.892717556Z","level":"ERROR","msg":"❌ FAILURE: Suite Failure Details","module":"main","suite":"sanity","error":"nonce not found in output"}
{"time":"2025-09-29T07:58:02.892764154Z","level":"INFO","msg":"🔑 KEY STEP: Starting resource teardown...","module":"main","usage_id":"4bb68d1fcf69c5830c352e60a66d0f6e"}
{"time":"2025-09-29T07:58:02.898488573Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","module":"main","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-29T07:58:02.898588259Z","level":"INFO","msg":"🧹 Requesting resource teardown","module":"main","usage_id":"4bb68d1fcf69c5830c352e60a66d0f6e"}
{"time":"2025-09-29T07:58:02.922077667Z","level":"INFO","msg":"✅ SUCCESS: Completed resource teardown successfully","module":"main","usage_id":"4bb68d1fcf69c5830c352e60a66d0f6e"}

2025-09-29T07:59:08Z Finished cleaning reserved resources

@yoaz-ssvlabs
Copy link

/test cluster=304,305,306,307 tests=(sanity)

@ssv-test-bot
Copy link

ssv-test-bot bot commented Sep 29, 2025

🔴 Test run for PR #2419

Branch: logs-log-more-details-per-validator-slot-epoch
Commit: a641687

Status

2025-09-29T12:59:40Z Starting test run
2025-09-29T12:59:41Z Test run submitted successfully for commit a641687
2025-09-29T12:59:42Z container image for commit a641687f35ee069a8b2f423701b05adbe43daec7 is build and present in container registry
2025-09-29T12:59:43Z using user defined node range cluster=304,305,306,307 on network=hoodi_stage
2025-09-29T12:59:45Z deploying commit a641687f35ee069a8b2f423701b05adbe43daec7 to ssv nodes 304,305,306,307
2025-09-29T13:00:30Z commit a641687f35ee069a8b2f423701b05adbe43daec7 is deployed to ssv nodes 304,305,306,307

Click to expand executor logs
═══════════════════════════════════════════════════════════════════════════════════════════════════════
                🧪  WELCOME TO Executor - SSV's Distributed Test Automation Execution Layer  🧪            

                                  ___ __  __ ___  ___  _   _  _____  ___   ___ 
                                 | __|\\ \\/ /| __|/ __|| | | ||_   _|/ _ \\ | _ \\
                                 | _|  >  < | _|| (__ | |_| |  | | | (_) ||   /
                                 |___|/_/\\_\\|___|\\___| \\___/   |_|  \\___/ |_|_\\
                                        

═══════════════════════════════════════════════════════════════════════════════════════════════════════
{"time":"2025-09-29T13:00:31.976832772Z","level":"INFO","msg":"🐳 Docker mode: Using environment variables for config generation"}
{"time":"2025-09-29T13:00:31.984419708Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-29T13:00:31.984586485Z","level":"INFO","msg":"📝 Requesting configuration generation from orchestrator API","network":"hoodi_stage","clusters":[304,305,306,307],"tests":"(sanity)"}
{"time":"2025-09-29T13:00:32.09314453Z","level":"INFO","msg":"✅ Configuration generated successfully via API","resource_usage_id":"9dcffe4fd858017b85d552c67714acaa"}
{"time":"2025-09-29T13:00:32.094949634Z","level":"INFO","msg":"🚀 EXECUTOR Initialized Successfully"}
{"time":"2025-09-29T13:00:32.095087283Z","level":"INFO","msg":"⚙️ Test configuration loaded","network":"hoodi_stage","nodes":[304,305,306,307],"test_type":{"Sanity":{"ShouldRun":true,"E2M":false,"BulkAmount":0},"Bulk":{"ShouldRun":false,"E2M":false,"BulkAmount":0},"Isolated":{"Tests":null}}}
{"time":"2025-09-29T13:00:36.453404375Z","level":"INFO","msg":"Generated operator pubkeys file","module":"scanner","path":"/app/shared/data/operators/operator-pubkeys-hoodi_stage.json"}
{"time":"2025-09-29T13:00:36.453663202Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"consensus"}
{"time":"2025-09-29T13:00:36.453727895Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"flow-emits"}
{"time":"2025-09-29T13:00:36.453790113Z","level":"INFO","msg":"Validation client initialized","module":"main","loki_enabled":true,"e2m_enabled":false}
{"time":"2025-09-29T13:00:36.453831032Z","level":"INFO","msg":"🔑 KEY STEP: Starting Isolated Tests Concurrently if exists...","module":"main"}
{"time":"2025-09-29T13:00:36.453916943Z","level":"INFO","msg":"🔑 KEY STEP: Starting Sanity Test Suite","module":"main"}
{"time":"2025-09-29T13:00:36.454030599Z","level":"INFO","msg":"No isolated tests configured, skipping","module":"main"}
{"time":"2025-09-29T13:00:36.509674899Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":304}
{"time":"2025-09-29T13:00:36.531903154Z","level":"INFO","msg":"Available slots","test":"sanity","node":304,"slots":3000}
{"time":"2025-09-29T13:00:36.531953812Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":305}
{"time":"2025-09-29T13:00:36.538802847Z","level":"INFO","msg":"Available slots","test":"sanity","node":305,"slots":398}
{"time":"2025-09-29T13:00:36.53883486Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":306}
{"time":"2025-09-29T13:00:36.544715969Z","level":"INFO","msg":"Available slots","test":"sanity","node":306,"slots":297}
{"time":"2025-09-29T13:00:36.544748149Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":307}
{"time":"2025-09-29T13:00:36.55072545Z","level":"INFO","msg":"Available slots","test":"sanity","node":307,"slots":716}
{"time":"2025-09-29T13:02:34.91292522Z","level":"ERROR","msg":"❌ FAILURE: Sanity Test Suite Failed","module":"main","error":"nonce not found in output"}
{"time":"2025-09-29T13:02:34.913015014Z","level":"INFO","msg":"⏳ PROGRESS: Waiting for all tests to finish","module":"main"}
{"time":"2025-09-29T13:02:34.913166101Z","level":"ERROR","msg":"❌ FAILURE: Test Execution Completed with Failures","module":"main","passed_suites":null,"failed_suites":["sanity"],"skipped_suites":["isolated"]}
{"time":"2025-09-29T13:02:34.913194425Z","level":"ERROR","msg":"❌ FAILURE: Suite Failure Details","module":"main","suite":"sanity","error":"nonce not found in output"}
{"time":"2025-09-29T13:02:34.913209708Z","level":"INFO","msg":"🔑 KEY STEP: Starting resource teardown...","module":"main","usage_id":"9dcffe4fd858017b85d552c67714acaa"}
{"time":"2025-09-29T13:02:34.920263618Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","module":"main","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-29T13:02:34.920422905Z","level":"INFO","msg":"🧹 Requesting resource teardown","module":"main","usage_id":"9dcffe4fd858017b85d552c67714acaa"}
{"time":"2025-09-29T13:02:34.966689241Z","level":"INFO","msg":"✅ SUCCESS: Completed resource teardown successfully","module":"main","usage_id":"9dcffe4fd858017b85d552c67714acaa"}

2025-09-29T13:02:38Z The test run failed with error

Result - 🔴 Failure

@yoaz-ssvlabs
Copy link

/test cluster=304,305,306,307 tests=(sanity)

@ssvlabs ssvlabs deleted a comment from ssv-test-bot bot Sep 30, 2025
@yoaz-ssvlabs
Copy link

/test

@ssvlabs ssvlabs deleted a comment from ssv-test-bot bot Sep 30, 2025
@ssvlabs ssvlabs deleted a comment from ssv-test-bot bot Sep 30, 2025
@vaclav-ssvlabs
Copy link
Contributor

/test

@ssv-test-bot
Copy link

ssv-test-bot bot commented Sep 30, 2025

🟢 Test run for PR #2419

Branch: logs-log-more-details-per-validator-slot-epoch
Commit: a641687

Status

2025-09-30T10:09:38Z Starting test run
2025-09-30T10:09:40Z Test run submitted successfully for commit a641687
2025-09-30T10:09:41Z container image for commit a641687f35ee069a8b2f423701b05adbe43daec7 is build and present in container registry
2025-09-30T10:09:42Z automatically allocated node range cluster=300,301,302,303 for test run on network=hoodi_stage
2025-09-30T10:09:43Z deploying commit a641687f35ee069a8b2f423701b05adbe43daec7 to ssv nodes 300,301,302,303
2025-09-30T10:10:30Z started test executor with tests=(sanity) and network=hoodi_stage

Click to expand executor logs
═══════════════════════════════════════════════════════════════════════════════════════════════════════
                🧪  WELCOME TO Executor - SSV's Distributed Test Automation Execution Layer  🧪            

                                  ___ __  __ ___  ___  _   _  _____  ___   ___ 
                                 | __|\\ \\/ /| __|/ __|| | | ||_   _|/ _ \\ | _ \\
{"time":"2025-09-30T10:11:45.683449781Z","level":"INFO","msg":"🐳 Docker mode: Using environment variables for config generation"}
                                 | _|  >  < | _|| (__ | |_| |  | | | (_) ||   /
                                 |___|/_/\\_\\|___|\\___| \\___/   |_|  \\___/ |_|_\\
                                        

═══════════════════════════════════════════════════════════════════════════════════════════════════════
{"time":"2025-09-30T10:11:45.693386362Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-30T10:11:45.693509304Z","level":"INFO","msg":"📝 Requesting configuration generation from orchestrator API","network":"hoodi_stage","clusters":[300,301,302,303],"tests":"(sanity)"}
{"time":"2025-09-30T10:11:45.729389475Z","level":"INFO","msg":"✅ Configuration generated successfully via API","resource_usage_id":"ba92a3ff3d1ad392af58aef54b9e61ef"}
{"time":"2025-09-30T10:11:45.731491564Z","level":"INFO","msg":"🚀 EXECUTOR Initialized Successfully"}
{"time":"2025-09-30T10:11:45.731573328Z","level":"INFO","msg":"⚙️ Test configuration loaded","network":"hoodi_stage","nodes":[300,301,302,303],"test_type":{"Sanity":{"ShouldRun":true,"E2M":false,"BulkAmount":0},"Bulk":{"ShouldRun":false,"E2M":false,"BulkAmount":0},"Isolated":{"Tests":null}}}
{"time":"2025-09-30T10:11:50.114418669Z","level":"INFO","msg":"Generated operator pubkeys file","module":"scanner","path":"/app/shared/data/operators/operator-pubkeys-hoodi_stage.json"}
{"time":"2025-09-30T10:11:50.114600848Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"consensus"}
{"time":"2025-09-30T10:11:50.114628691Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"flow-emits"}
{"time":"2025-09-30T10:11:50.114652906Z","level":"INFO","msg":"Validation client initialized","module":"main","loki_enabled":true,"e2m_enabled":false}
{"time":"2025-09-30T10:11:50.114699801Z","level":"INFO","msg":"🔑 KEY STEP: Starting Isolated Tests Concurrently if exists...","module":"main"}
{"time":"2025-09-30T10:11:50.114776648Z","level":"INFO","msg":"🔑 KEY STEP: Starting Sanity Test Suite","module":"main"}
{"time":"2025-09-30T10:11:50.115080946Z","level":"INFO","msg":"No isolated tests configured, skipping","module":"main"}
{"time":"2025-09-30T10:11:50.16126737Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":300}
{"time":"2025-09-30T10:11:50.173233923Z","level":"INFO","msg":"Available slots","test":"sanity","node":300,"slots":3000}
{"time":"2025-09-30T10:11:50.173293574Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":301}
{"time":"2025-09-30T10:11:50.182964829Z","level":"INFO","msg":"Available slots","test":"sanity","node":301,"slots":398}
{"time":"2025-09-30T10:11:50.183049627Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":302}
{"time":"2025-09-30T10:11:50.189542398Z","level":"INFO","msg":"Available slots","test":"sanity","node":302,"slots":297}
{"time":"2025-09-30T10:11:50.189623608Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":303}
{"time":"2025-09-30T10:11:50.19614365Z","level":"INFO","msg":"Available slots","test":"sanity","node":303,"slots":716}
{"time":"2025-09-30T10:12:27.134347184Z","level":"INFO","msg":"Extracted keyshares path","test":"sanity","module":"keys","path":"/app/shared/data/keyshares/0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d.json"}
{"time":"2025-09-30T10:12:27.134454677Z","level":"INFO","msg":"Key shares file generated successfully","test":"sanity","keyshare_path":"/app/shared/data/keyshares/0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d.json"}
{"time":"2025-09-30T10:12:29.22581702Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99312359999200282400000000"}
{"time":"2025-09-30T10:12:29.226016768Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-09-30T10:12:29.226153949Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-09-30T10:12:29.232399472Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99312359999200282400000000"}
{"time":"2025-09-30T10:12:29.232511353Z","level":"INFO","msg":"Allowance","test":"sanity","module":"contract","allowance":"99312359999200282400000000"}
{"time":"2025-09-30T10:12:29.50376921Z","level":"INFO","msg":"Registering validator","test":"sanity","module":"contract","tx_hash":"0x58b5d7dd7e039ba8c9a00367461a8a105c95b0d42c95ef5863db8418c9d236cf"}
{"time":"2025-09-30T10:12:29.510020658Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x58b5d7dd7e039ba8c9a00367461a8a105c95b0d42c95ef5863db8418c9d236cf"}
{"time":"2025-09-30T10:12:39.517458988Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x58b5d7dd7e039ba8c9a00367461a8a105c95b0d42c95ef5863db8418c9d236cf"}
{"time":"2025-09-30T10:12:39.517579636Z","level":"INFO","msg":"✅ SUCCESS: Contract Register Successful","test":"sanity","txHash":"0x58b5d7dd7e039ba8c9a00367461a8a105c95b0d42c95ef5863db8418c9d236cf","block_hash":"0x134c87dba009d1412d9cc50d26acdb7ee4fb9badc592631d2c3664d61c2e987d"}
{"time":"2025-09-30T10:12:39.533996425Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":10,"attempt":1}
{"time":"2025-09-30T10:12:49.544841862Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":20,"attempt":2}
{"time":"2025-09-30T10:13:09.567599382Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":40,"attempt":3}
{"time":"2025-09-30T10:13:49.607457374Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":80,"attempt":4}
{"time":"2025-09-30T10:15:09.62418252Z","level":"INFO","msg":"Successfully retrieved validator index from exporter","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d"}
{"time":"2025-09-30T10:15:17.747788335Z","level":"INFO","msg":"Validator event validation successful","module":"main","module":"loki-validator","validated_validators":1,"event":"ValidatorAdded"}
{"time":"2025-09-30T10:15:17.748003Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"registration"}
{"time":"2025-09-30T10:15:20.069322498Z","level":"INFO","msg":"Liquidating cluster","test":"sanity","module":"contract","tx_hash":"0xfe0575e973b8ca16af2b456da35ccf2f9da6662e731c5f27fd053a91c1f8606d"}
{"time":"2025-09-30T10:15:20.072207331Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0xfe0575e973b8ca16af2b456da35ccf2f9da6662e731c5f27fd053a91c1f8606d"}
{"time":"2025-09-30T10:15:30.084231719Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0xfe0575e973b8ca16af2b456da35ccf2f9da6662e731c5f27fd053a91c1f8606d"}
{"time":"2025-09-30T10:15:30.084347746Z","level":"INFO","msg":"✅ SUCCESS: Cluster Liquidation Successful","test":"sanity","txHash":"0xfe0575e973b8ca16af2b456da35ccf2f9da6662e731c5f27fd053a91c1f8606d","block_hash":"0x3cb52afa574ee72b5bc3dab20acd50501662bbef3f425884d56c826f772c0924"}
{"time":"2025-09-30T10:15:30.084488037Z","level":"INFO","msg":"Querying Loki for transaction hash validation","module":"main","module":"loki-validator","query":"{container=~\\"ssv-node-300|ssv-node-301|ssv-node-302|ssv-node-303\\"} |= \\"0xfe0575e973b8ca16af2b456da35ccf2f9da6662e731c5f27fd053a91c1f8606d\\"","tx_hash":"0xfe0575e973b8ca16af2b456da35ccf2f9da6662e731c5f27fd053a91c1f8606d"}
{"time":"2025-09-30T10:15:30.283726075Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1759216530,"end_unix":1759227330}
{"time":"2025-09-30T10:16:00.33524579Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1759216530,"end_unix":1759227360}
{"time":"2025-09-30T10:17:00.442277813Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1759216530,"end_unix":1759227420}
{"time":"2025-09-30T10:18:30.570313348Z","level":"INFO","msg":"Event validation successful","module":"main","module":"loki-validator","valid_entries":4,"event":"ClusterLiquidated"}
{"time":"2025-09-30T10:18:30.570479918Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"liquidation"}
{"time":"2025-09-30T10:18:32.686007517Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99312359999200282400000000"}
{"time":"2025-09-30T10:18:32.686105889Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-09-30T10:18:32.686146412Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-09-30T10:18:32.76700472Z","level":"INFO","msg":"Reactivating cluster","test":"sanity","module":"contract","tx_hash":"0x6fff74d0c74258e55a1f7fc3bb8cc39dcd775555193021da93809b72c07bbcf0"}
{"time":"2025-09-30T10:18:32.772238946Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x6fff74d0c74258e55a1f7fc3bb8cc39dcd775555193021da93809b72c07bbcf0"}
{"time":"2025-09-30T10:18:42.799383168Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x6fff74d0c74258e55a1f7fc3bb8cc39dcd775555193021da93809b72c07bbcf0"}
{"time":"2025-09-30T10:18:42.799460629Z","level":"INFO","msg":"✅ SUCCESS: Cluster Reactivation Successful","test":"sanity","txHash":"0x6fff74d0c74258e55a1f7fc3bb8cc39dcd775555193021da93809b72c07bbcf0","block_hash":"0xac283eba124cb7eece7bbcfa3522fb3db61f7c207ec7b17e85b92ad0f6e25e16"}
{"time":"2025-09-30T10:18:42.799546897Z","level":"INFO","msg":"Querying Loki for transaction hash validation","module":"main","module":"loki-validator","query":"{container=~\\"ssv-node-300|ssv-node-301|ssv-node-302|ssv-node-303\\"} |= \\"0x6fff74d0c74258e55a1f7fc3bb8cc39dcd775555193021da93809b72c07bbcf0\\"","tx_hash":"0x6fff74d0c74258e55a1f7fc3bb8cc39dcd775555193021da93809b72c07bbcf0"}
{"time":"2025-09-30T10:18:43.089367031Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1759216722,"end_unix":1759227522}
{"time":"2025-09-30T10:19:13.156863528Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1759216722,"end_unix":1759227553}
{"time":"2025-09-30T10:20:13.224018956Z","level":"INFO","msg":"Event validation successful","module":"main","module":"loki-validator","valid_entries":2,"event":"ClusterReactivated"}
{"time":"2025-09-30T10:20:13.224093692Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"reactivation"}
{"time":"2025-09-30T10:20:15.366427552Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99303359999200282400000000"}
{"time":"2025-09-30T10:20:15.366539524Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-09-30T10:20:15.366611456Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-09-30T10:20:15.5079868Z","level":"INFO","msg":"Removing validator","test":"sanity","module":"contract","tx_hash":"0x1abb9582c61e838d6dfcc8047bf4f2b84e529b6b1afc3ae83b88b38a3869c3f0"}
{"time":"2025-09-30T10:20:15.512410035Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x1abb9582c61e838d6dfcc8047bf4f2b84e529b6b1afc3ae83b88b38a3869c3f0"}
{"time":"2025-09-30T10:20:25.522777056Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x1abb9582c61e838d6dfcc8047bf4f2b84e529b6b1afc3ae83b88b38a3869c3f0"}
{"time":"2025-09-30T10:20:25.522843909Z","level":"INFO","msg":"✅ SUCCESS: Contract Removal Successful","test":"sanity","blockHash":"0xb6b34bdccb0dc1d56d2e7d9dedfb4e66d87bfee34cc572f66eb5d00aaac73160"}
{"time":"2025-09-30T10:20:25.925119886Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1759216825,"end_unix":1759227625}
{"time":"2025-09-30T10:20:55.993269586Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1759216825,"end_unix":1759227655}
{"time":"2025-09-30T10:21:56.050211868Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1759216825,"end_unix":1759227715}
{"time":"2025-09-30T10:23:26.163011605Z","level":"INFO","msg":"Validator event validation successful","module":"main","module":"loki-validator","validated_validators":1,"event":"ValidatorRemoved"}
{"time":"2025-09-30T10:23:26.16308339Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"removal"}
{"time":"2025-09-30T10:23:26.163170915Z","level":"INFO","msg":"✅ SUCCESS: Sanity Test Suite Completed Successfully","module":"main","register":{"Contract":true,"E2M":false,"Loki":true},"liquidate":{"Contract":true,"E2M":false,"Loki":true},"reactivate":{"Contract":true,"E2M":false,"Loki":true},"remove":{"Contract":true,"E2M":false,"Loki":true}}
{"time":"2025-09-30T10:23:26.163202098Z","level":"INFO","msg":"⏳ PROGRESS: Waiting for all tests to finish","module":"main"}
{"time":"2025-09-30T10:23:26.163242618Z","level":"INFO","msg":"✅ SUCCESS: All Test Suites Completed Successfully","module":"main","passed_suites":["sanity"],"skipped_suites":["isolated"]}
{"time":"2025-09-30T10:23:26.163263328Z","level":"INFO","msg":"🔑 KEY STEP: Starting resource teardown...","module":"main","usage_id":"ba92a3ff3d1ad392af58aef54b9e61ef"}
{"time":"2025-09-30T10:23:26.189958836Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","module":"main","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-30T10:23:26.190020945Z","level":"INFO","msg":"🧹 Requesting resource teardown","module":"main","usage_id":"ba92a3ff3d1ad392af58aef54b9e61ef"}
{"time":"2025-09-30T10:23:31.215668235Z","level":"INFO","msg":"✅ SUCCESS: Completed resource teardown successfully","module":"main","usage_id":"ba92a3ff3d1ad392af58aef54b9e61ef"}

2025-09-30T10:23:34Z The test run finished successfully

Result - 🟢 Success

@vaclav-ssvlabs
Copy link
Contributor

/test cluster=85,86,87,88

@ssv-test-bot
Copy link

ssv-test-bot bot commented Sep 30, 2025

Invalid cluster sequence: cluster number 85 is out of valid range (300-333)

@vaclav-ssvlabs
Copy link
Contributor

/test help

@ssv-test-bot
Copy link

ssv-test-bot bot commented Sep 30, 2025

❓ Help

Available Commands

/test - Run Tests

To run tests, use the command /test followed by optional parameters.
Example:
/test cluster=300,301,302,303 tests=(sanity,e2m) text network=hoodi_stage

Available parameters (all optional):

  • cluster — Comma-separated operators IDs (4 or 7 numbers in ascending order). If omitted (recommended), the workflow auto-allocates nodes. Valid range: 300-333.
  • tests — A list describing which tests to run. Default: (sanity,e2m)
  • network — Network configuration to use. Default: hoodi_stage

🧪 TESTS parameter

Format:

(type[,options]),(type[,options]),...

Supported test types:

  • sanity[,e2m] — Sanity tests (optional e2m validation)
  • bulk[,e2m][,amount] — Bulk tests (optional e2m validation; optional validator count as amount - default 3, max 10)
  • vouch,key:value — Vouch tests (requires all keys)

Isolated parameters for vouch (all required):

  • epochs:N — Number of epochs to examine
  • amountOfETHNodes:N — Number of ETH1 nodes vouch deployed with

💡 Usage examples

  • Default (no cluster, no network, no tests; defaults kick in):
/test
  • Simple bulk run with amount only, default network (hoodi_stage):
/test cluster=300,301,302,303 tests=(bulk,5)
  • With specific cluster, e2m on both sanity and bulk, fixed amount:
/test cluster=300,301,302,303 tests=(sanity,e2m),(bulk,e2m,10) network=hoodi_stage
  • Sanity plus a vouch run:
/test cluster=300,301,302,303 tests=(sanity),(vouch,epochs:5,amountOfETHNodes:4) network=hoodi_stage
  • Simple bulk run with default validators amount (3):
/test cluster=300,301,302,303 tests=(bulk) network=hoodi_stage

/test skip-ci - Skip CI Pipeline

⚠️ Restricted Command: Only members of authorized teams can use this command.

Bypasses the CI pipeline by setting the configured status check to success.
Example:

/test skip-ci

Important Notes:

  • Only members of authorized teams (configurable) can execute this command
  • Use with caution as it bypasses all automated checks

y0sher
y0sher previously approved these changes Oct 19, 2025
Copy link
Contributor

@y0sher y0sher left a comment

Choose a reason for hiding this comment

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

@iurii-ssv this look good but also breaks spec alignment badly, so I'm wondering if we should do similar changes in spec or just diverge from their code entirely.

@iurii-ssv
Copy link
Contributor Author

@iurii-ssv this look good but also breaks spec alignment badly, so I'm wondering if we should do similar changes in spec or just diverge from their code entirely.

@y0sher I think our runner's code has diverged from what we have in ssv-spec repo so much that it's no longer practical to try and keep it "similar" at this point, as long as spec-tests pass ofc :)

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.

5 participants