-
Notifications
You must be signed in to change notification settings - Fork 184
chore: update license to 2026 #6398
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThis PR updates copyright year headers from 2019-2025 to 2019-2026 across the entire codebase, spanning 300+ files including benchmarks, build configuration, source modules, and tests. Additionally, the license header generation script is modified to update its copyright regex pattern and refine file exclusion logic. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
src/lotus_json/opt.rs (1)
29-33: Fix typo in test function name.The test function is named
shapshots()but should besnapshots()to match the trait method name.💅 Proposed fix
#[test] -fn shapshots() { +fn snapshots() { assert_one_snapshot(json!({"/": "baeaaaaa"}), Some(::cid::Cid::default())); assert_one_snapshot(json!(null), None::<::cid::Cid>); }src/message_pool/block_prob.rs (1)
103-126:test_winner_probabilityassertion looks inverted (likely always “passing for the wrong reason”). The message says the average is “too far off”, but the condition requires it to be far off (> 0.01).Proposed fix
- assert!((avg - 5.0).abs() > 0.01, "Average too far off "); + assert!((avg - 5.0).abs() < 0.01, "Average too far off");src/lotus_json/actors/states/power_states.rs (1)
11-11: RemoveEqfrom derive or changeFilterEstimatefield to support it.The
PowerStateLotusJsonstruct derivesEq, but thethis_epoch_qa_power_smoothedfield usesFilterEstimatefromfil_actors_shared, which implements onlyPartialEqand notEq. This causes a compilation error. Either removeEqfrom the derive macro (keeping onlyPartialEq) or find an alternative that implementsEq.
🤖 Fix all issues with AI agents
In @src/db/car/plain.rs:
- Line 1: Update the copyright header string in the repository metadata: replace
the line that reads "// Copyright 2019-2025 ChainSafe Systems" with "//
Copyright 2019-2026 ChainSafe Systems" in the scripts/copyright.txt file so the
year bump is consistent across the repo.
🧹 Nitpick comments (2)
src/lotus_json/receipt.rs (1)
89-89: Minor: Fix typo in test function name.The function is named
shapshotsbut should besnapshotsto match the trait method it calls.💡 Proposed fix
#[test] -fn shapshots() { +fn snapshots() { assert_all_snapshots::<Receipt>() }src/cli/subcommands/config_cmd.rs (1)
35-36: Remove unnecessaryasyncfrom the test.This test doesn't perform any async operations or await any futures, so the
#[tokio::test]async context is unused. Simplify to#[test].Simplified test signature
- #[tokio::test] - async fn given_default_configuration_should_print_valid_toml() { + #[test] + fn given_default_configuration_should_print_valid_toml() {Additionally, the test could be simplified by using
Vec<u8>directly instead ofBufWriter, sinceVec<u8>implementsWrite:- let mut sink = std::io::BufWriter::new(Vec::new()); + let mut sink = Vec::new(); ConfigCommands::Dump.run(&mut sink).unwrap(); - let actual_config: Config = toml::from_str(std::str::from_utf8(sink.buffer()).unwrap()) + let actual_config: Config = toml::from_str(std::str::from_utf8(&sink).unwrap())
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (300)
benches/car-index.rsbenches/example-benchmark.rsbenches/tipset-validation.rsbuild.rsinterop-tests/build.rsinterop-tests/src/lib.rsinterop-tests/src/tests/bitswap_go_compat.rsinterop-tests/src/tests/go_ffi.rsinterop-tests/src/tests/kad_go_compat.rsinterop-tests/src/tests/mod.rsscripts/add_license.shsrc/auth/mod.rssrc/beacon/beacon_entries.rssrc/beacon/drand.rssrc/beacon/mock_beacon.rssrc/beacon/mod.rssrc/beacon/signatures/mod.rssrc/beacon/signatures/public_key_impls.rssrc/beacon/signatures/signature_impls.rssrc/beacon/signatures/tests.rssrc/beacon/tests/drand.rssrc/benchmark_private/mod.rssrc/benchmark_private/tipset_validation.rssrc/bin/forest-cli.rssrc/bin/forest-dev.rssrc/bin/forest-tool.rssrc/bin/forest-wallet.rssrc/bin/forest.rssrc/blocks/block.rssrc/blocks/chain4u.rssrc/blocks/election_proof.rssrc/blocks/gossip_block.rssrc/blocks/header.rssrc/blocks/header/test.rssrc/blocks/mod.rssrc/blocks/tests/serialization_vectors.rssrc/blocks/tests/ticket_test.rssrc/blocks/ticket.rssrc/blocks/tipset.rssrc/blocks/vrf_proof.rssrc/chain/mod.rssrc/chain/snapshot_format.rssrc/chain/store/base_fee.rssrc/chain/store/chain_store.rssrc/chain/store/errors.rssrc/chain/store/index.rssrc/chain/store/mod.rssrc/chain/store/tipset_tracker.rssrc/chain/tests.rssrc/chain/weight.rssrc/chain_sync/bad_block_cache.rssrc/chain_sync/chain_follower.rssrc/chain_sync/chain_muxer.rssrc/chain_sync/consensus.rssrc/chain_sync/metrics.rssrc/chain_sync/mod.rssrc/chain_sync/network_context.rssrc/chain_sync/sync_status.rssrc/chain_sync/tipset_syncer.rssrc/chain_sync/validation.rssrc/cid_collections/hash_map.rssrc/cid_collections/hash_set.rssrc/cid_collections/mod.rssrc/cid_collections/small_cid_vec.rssrc/cli/humantoken.rssrc/cli/main.rssrc/cli/mod.rssrc/cli/subcommands/auth_cmd.rssrc/cli/subcommands/chain_cmd.rssrc/cli/subcommands/chain_cmd/list.rssrc/cli/subcommands/chain_cmd/prune.rssrc/cli/subcommands/config_cmd.rssrc/cli/subcommands/f3_cmd.rssrc/cli/subcommands/f3_cmd/tests.rssrc/cli/subcommands/healthcheck_cmd.rssrc/cli/subcommands/info_cmd.rssrc/cli/subcommands/mod.rssrc/cli/subcommands/mpool_cmd.rssrc/cli/subcommands/net_cmd.rssrc/cli/subcommands/shutdown_cmd.rssrc/cli/subcommands/snapshot_cmd.rssrc/cli/subcommands/state_cmd.rssrc/cli/subcommands/sync_cmd.rssrc/cli/subcommands/wait_api_cmd.rssrc/cli_shared/cli/client.rssrc/cli_shared/cli/completion_cmd.rssrc/cli_shared/cli/config.rssrc/cli_shared/cli/mod.rssrc/cli_shared/logger/mod.rssrc/cli_shared/mod.rssrc/cli_shared/snapshot.rssrc/daemon/bundle.rssrc/daemon/context.rssrc/daemon/db_util.rssrc/daemon/main.rssrc/daemon/mod.rssrc/db/blockstore_with_read_cache.rssrc/db/blockstore_with_write_buffer.rssrc/db/car/any.rssrc/db/car/forest.rssrc/db/car/forest/index/hash.rssrc/db/car/forest/index/mod.rssrc/db/car/many.rssrc/db/car/mod.rssrc/db/car/plain.rssrc/db/db_mode.rssrc/db/either.rssrc/db/gc/mod.rssrc/db/gc/snapshot.rssrc/db/memory.rssrc/db/migration/db_migration.rssrc/db/migration/migration_map.rssrc/db/migration/mod.rssrc/db/migration/v0_22_1.rssrc/db/migration/v0_26_0.rssrc/db/migration/void_migration.rssrc/db/mod.rssrc/db/parity_db.rssrc/db/parity_db_config.rssrc/db/tests/db_utils/mod.rssrc/db/tests/db_utils/parity.rssrc/db/tests/mem_test.rssrc/db/tests/parity_test.rssrc/db/tests/subtests/mod.rssrc/db/ttl/mod.rssrc/dev/main.rssrc/dev/mod.rssrc/dev/subcommands/mod.rssrc/documentation.rssrc/eth/eip_1559_transaction.rssrc/eth/eip_155_transaction.rssrc/eth/homestead_transaction.rssrc/eth/mod.rssrc/eth/transaction.rssrc/f3/go_ffi.rssrc/f3/mod.rssrc/f3/snapshot.rssrc/f3/snapshot/tests.rssrc/fil_cns/mod.rssrc/fil_cns/validation.rssrc/fil_cns/weight.rssrc/genesis/mod.rssrc/health/endpoints.rssrc/health/mod.rssrc/interpreter/errors.rssrc/interpreter/fvm2.rssrc/interpreter/fvm3.rssrc/interpreter/fvm4.rssrc/interpreter/mod.rssrc/interpreter/vm.rssrc/ipld/mod.rssrc/ipld/selector/empty_map.rssrc/ipld/selector/mod.rssrc/ipld/tests/cbor_test.rssrc/ipld/tests/selector_explore.rssrc/ipld/tests/selector_gen_tests.rssrc/ipld/util.rssrc/key_management/errors.rssrc/key_management/keystore.rssrc/key_management/mod.rssrc/key_management/wallet.rssrc/key_management/wallet_helpers.rssrc/lib.rssrc/libp2p/behaviour.rssrc/libp2p/chain_exchange/behaviour.rssrc/libp2p/chain_exchange/message.rssrc/libp2p/chain_exchange/mod.rssrc/libp2p/chain_exchange/provider.rssrc/libp2p/config.rssrc/libp2p/discovery.rssrc/libp2p/gossip_params.rssrc/libp2p/hello/behaviour.rssrc/libp2p/hello/codec.rssrc/libp2p/hello/message.rssrc/libp2p/hello/mod.rssrc/libp2p/keypair.rssrc/libp2p/metrics.rssrc/libp2p/mod.rssrc/libp2p/peer_manager.rssrc/libp2p/ping.rssrc/libp2p/rpc/decoder.rssrc/libp2p/rpc/mod.rssrc/libp2p/service.rssrc/libp2p/tests/decode_test.rssrc/libp2p_bitswap/behaviour.rssrc/libp2p_bitswap/bitswap_pb.rssrc/libp2p_bitswap/internals/codec.rssrc/libp2p_bitswap/internals/event_handlers.rssrc/libp2p_bitswap/internals/mod.rssrc/libp2p_bitswap/internals/prefix.rssrc/libp2p_bitswap/message.rssrc/libp2p_bitswap/metrics.rssrc/libp2p_bitswap/mod.rssrc/libp2p_bitswap/request_manager.rssrc/libp2p_bitswap/store.rssrc/libp2p_bitswap/tests/request_manager.rssrc/lotus_json/actor_state.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/params/account_params.rssrc/lotus_json/actors/params/cron_params.rssrc/lotus_json/actors/params/datacap_params.rssrc/lotus_json/actors/params/eam_params.rssrc/lotus_json/actors/params/evm_params.rssrc/lotus_json/actors/params/init_params.rssrc/lotus_json/actors/params/market_params.rssrc/lotus_json/actors/params/miner_params.rssrc/lotus_json/actors/params/mod.rssrc/lotus_json/actors/params/multisig_params.rssrc/lotus_json/actors/params/paych_params.rssrc/lotus_json/actors/params/power_params.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/lotus_json/actors/states/account_state.rssrc/lotus_json/actors/states/cron_state.rssrc/lotus_json/actors/states/datacap_state.rssrc/lotus_json/actors/states/evm_state.rssrc/lotus_json/actors/states/init_state.rssrc/lotus_json/actors/states/market_state.rssrc/lotus_json/actors/states/miner_state.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/actors/states/power_states.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/actors/states/system_state.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/lotus_json/actors/states/vesting_funds.rssrc/lotus_json/address.rssrc/lotus_json/allocation.rssrc/lotus_json/arc.rssrc/lotus_json/beacon_entry.rssrc/lotus_json/beneficiary_term.rssrc/lotus_json/big_int.rssrc/lotus_json/bit_field.rssrc/lotus_json/block_header.rssrc/lotus_json/bytecode_hash.rssrc/lotus_json/cid.rssrc/lotus_json/duration.rssrc/lotus_json/election_proof.rssrc/lotus_json/entry.rssrc/lotus_json/extended_sector_info.rssrc/lotus_json/filter_estimate.rssrc/lotus_json/gossip_block.rssrc/lotus_json/hash_map.rssrc/lotus_json/ipld.rssrc/lotus_json/key_info.rssrc/lotus_json/message.rssrc/lotus_json/miner_info.rssrc/lotus_json/miner_power.rssrc/lotus_json/mod.rssrc/lotus_json/nonempty.rssrc/lotus_json/opt.rssrc/lotus_json/padded_piece_size.rssrc/lotus_json/pending_beneficiary_change.rssrc/lotus_json/po_st_proof.rssrc/lotus_json/power_claim.rssrc/lotus_json/raw_bytes.rssrc/lotus_json/receipt.rssrc/lotus_json/registered_po_st_proof.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/sector_info.rssrc/lotus_json/sector_size.rssrc/lotus_json/signature.rssrc/lotus_json/signature_type.rssrc/lotus_json/signed_message.rssrc/lotus_json/ticket.rssrc/lotus_json/tipset_keys.rssrc/lotus_json/token_amount.rssrc/lotus_json/token_state.rssrc/lotus_json/tombstone.rssrc/lotus_json/transient_data.rssrc/lotus_json/vec.rssrc/lotus_json/vec_u8.rssrc/lotus_json/verifreg_claim.rssrc/lotus_json/vrf_proof.rssrc/message/chain_message.rssrc/message/mod.rssrc/message/signed_message.rssrc/message/tests/builder_test.rssrc/message_pool/block_prob.rssrc/message_pool/config.rssrc/message_pool/errors.rssrc/message_pool/mod.rssrc/message_pool/msg_chain.rssrc/message_pool/msgpool/metrics.rssrc/message_pool/msgpool/mod.rssrc/message_pool/msgpool/msg_pool.rssrc/message_pool/msgpool/provider.rssrc/message_pool/msgpool/selection.rssrc/message_pool/msgpool/test_provider.rssrc/message_pool/msgpool/utils.rssrc/metrics/db.rssrc/metrics/mod.rssrc/networks/actors_bundle.rssrc/networks/butterflynet/mod.rssrc/networks/calibnet/mod.rssrc/networks/devnet/mod.rssrc/networks/drand.rssrc/networks/mainnet/mod.rssrc/networks/metrics.rs
🧰 Additional context used
🧠 Learnings (23)
📓 Common learnings
Learnt from: LesnyRumcajs
Repo: ChainSafe/forest PR: 5907
File: src/rpc/methods/state.rs:523-570
Timestamp: 2025-08-06T15:44:33.467Z
Learning: LesnyRumcajs prefers to rely on BufWriter's Drop implementation for automatic flushing rather than explicit flush() calls in Forest codebase.
📚 Learning: 2025-08-07T13:39:15.107Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5886
File: interop-tests/src/tests/go_app/gen.go:29-29
Timestamp: 2025-08-07T13:39:15.107Z
Learning: Auto-generated files like those created by rust2go (indicated by "Generated by rust2go. Please DO NOT edit this C part manually." comment) in the Forest project should be skipped during code review as they are not intended for manual editing.
Applied to files:
src/bin/forest-tool.rssrc/bin/forest-cli.rssrc/bin/forest-dev.rssrc/bin/forest-wallet.rssrc/db/car/forest/index/hash.rssrc/db/car/forest.rssrc/cli_shared/cli/client.rssrc/db/car/forest/index/mod.rs
📚 Learning: 2025-08-08T12:10:45.218Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5867
File: src/ipld/util.rs:553-558
Timestamp: 2025-08-08T12:10:45.218Z
Learning: Forest project targets Rust stable >=1.89; features stabilized in 1.88 like let-chains are acceptable in this codebase.
Applied to files:
src/bin/forest-tool.rssrc/lotus_json/pending_beneficiary_change.rssrc/chain/store/tipset_tracker.rssrc/bin/forest-cli.rssrc/chain_sync/tipset_syncer.rssrc/lotus_json/allocation.rssrc/lotus_json/actors/states/evm_state.rssrc/libp2p_bitswap/metrics.rssrc/eth/homestead_transaction.rssrc/lotus_json/actor_state.rssrc/cli/subcommands/healthcheck_cmd.rssrc/lotus_json/filter_estimate.rssrc/bin/forest-dev.rssrc/lotus_json/extended_sector_info.rssrc/health/endpoints.rssrc/db/either.rssrc/cli_shared/snapshot.rssrc/key_management/errors.rssrc/lotus_json/signature.rssrc/chain_sync/network_context.rssrc/lib.rssrc/lotus_json/actors/params/init_params.rssrc/eth/eip_155_transaction.rssrc/libp2p_bitswap/behaviour.rssrc/lotus_json/vec_u8.rssrc/db/tests/mem_test.rssrc/db/migration/db_migration.rssrc/lotus_json/actors/states/market_state.rssrc/beacon/signatures/public_key_impls.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/states/init_state.rssrc/db/car/mod.rssrc/libp2p/behaviour.rssrc/lotus_json/actors/params/cron_params.rssrc/lotus_json/vrf_proof.rssrc/cli_shared/logger/mod.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/sector_info.rssrc/lotus_json/actors/params/eam_params.rssrc/db/migration/migration_map.rssrc/interpreter/fvm4.rssrc/chain/store/errors.rssrc/lotus_json/actors/params/market_params.rssrc/lotus_json/tipset_keys.rssrc/libp2p/keypair.rssrc/lotus_json/actors/params/paych_params.rssrc/lotus_json/actors/params/multisig_params.rssrc/lotus_json/actors/params/account_params.rssrc/health/mod.rssrc/chain/store/chain_store.rssrc/libp2p/hello/codec.rssrc/db/car/forest/index/hash.rssrc/networks/metrics.rssrc/cid_collections/small_cid_vec.rssrc/chain/tests.rssrc/db/car/forest.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/interpreter/fvm2.rssrc/lotus_json/actors/states/vesting_funds.rssrc/libp2p_bitswap/store.rssrc/lotus_json/actors/states/reward_state.rssrc/db/db_mode.rssrc/libp2p/peer_manager.rssrc/blocks/header/test.rssrc/genesis/mod.rssrc/lotus_json/actors/params/power_params.rssrc/cli_shared/cli/client.rssrc/lotus_json/transient_data.rssrc/beacon/tests/drand.rssrc/fil_cns/mod.rssrc/lotus_json/signature_type.rssrc/lotus_json/actors/params/miner_params.rssrc/benchmark_private/mod.rssrc/libp2p_bitswap/internals/event_handlers.rssrc/lotus_json/big_int.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/lotus_json/sector_size.rssrc/f3/mod.rssrc/lotus_json/arc.rssrc/f3/snapshot.rssrc/interpreter/vm.rssrc/lotus_json/actors/states/account_state.rssrc/message_pool/msgpool/provider.rssrc/lotus_json/vec.rssrc/lotus_json/bytecode_hash.rssrc/lotus_json/actors/states/system_state.rssrc/libp2p/service.rssrc/beacon/signatures/signature_impls.rssrc/lotus_json/tombstone.rssrc/cli/subcommands/f3_cmd/tests.rssrc/blocks/tipset.rssrc/cid_collections/hash_set.rssrc/lotus_json/cid.rssrc/blocks/tests/ticket_test.rssrc/networks/mainnet/mod.rssrc/lotus_json/miner_info.rssrc/fil_cns/validation.rssrc/message_pool/msg_chain.rssrc/lotus_json/opt.rssrc/libp2p/rpc/decoder.rssrc/lotus_json/actors/states/datacap_state.rssrc/f3/snapshot/tests.rssrc/lotus_json/actors/params/mod.rssrc/libp2p/discovery.rssrc/lotus_json/padded_piece_size.rsinterop-tests/src/lib.rssrc/lotus_json/miner_power.rssrc/benchmark_private/tipset_validation.rssrc/key_management/keystore.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/duration.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/nonempty.rssrc/cli/subcommands/f3_cmd.rssrc/lotus_json/actors/states/cron_state.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/address.rssrc/libp2p_bitswap/tests/request_manager.rssrc/cli_shared/cli/completion_cmd.rssrc/interpreter/fvm3.rssrc/lotus_json/actors/states/miner_state.rssrc/interpreter/errors.rssrc/libp2p/hello/behaviour.rssrc/lotus_json/bit_field.rssrc/lotus_json/message.rssrc/libp2p_bitswap/internals/codec.rssrc/lotus_json/beneficiary_term.rssrc/lotus_json/token_amount.rssrc/lotus_json/gossip_block.rssrc/lotus_json/hash_map.rs
📚 Learning: 2026-01-05T12:54:40.850Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6381
File: src/lotus_json/actors/states/cron_state.rs:8-8
Timestamp: 2026-01-05T12:54:40.850Z
Learning: In Rust code reviews, do not derive Eq for a struct if any field does not implement Eq (e.g., types from external dependencies). If a type like CronStateLotusJson includes fields wrapping external dependencies that lack Eq, derive PartialEq (or implement PartialEq manually) but avoid deriving Eq. This ensures comparisons compile and reflect actual equivalence semantics. When needed, consider implementing custom PartialEq (and possibly Eq) only after ensuring all fields (or wrappers) implement Eq, or keep PartialEq-only if full equality semantics cannot be expressed.
Applied to files:
src/bin/forest-tool.rssrc/chain/store/index.rssrc/cli/subcommands/chain_cmd/list.rssrc/lotus_json/pending_beneficiary_change.rssrc/chain/store/tipset_tracker.rssrc/db/car/many.rssrc/bin/forest-cli.rssrc/chain_sync/tipset_syncer.rssrc/networks/drand.rssrc/lotus_json/allocation.rssrc/chain_sync/metrics.rssrc/chain_sync/sync_status.rssrc/lotus_json/actors/states/evm_state.rssrc/libp2p_bitswap/metrics.rssrc/beacon/signatures/tests.rssrc/eth/homestead_transaction.rssrc/libp2p_bitswap/request_manager.rssrc/lotus_json/actor_state.rssrc/chain/store/mod.rssrc/blocks/vrf_proof.rssrc/cli/subcommands/healthcheck_cmd.rssrc/chain_sync/consensus.rssrc/cli_shared/cli/config.rssrc/lotus_json/filter_estimate.rsbuild.rssrc/bin/forest-dev.rssrc/lotus_json/extended_sector_info.rssrc/cli/subcommands/info_cmd.rssrc/libp2p_bitswap/internals/prefix.rssrc/blocks/chain4u.rssrc/health/endpoints.rssrc/db/either.rssrc/cli_shared/snapshot.rssrc/key_management/errors.rssrc/lotus_json/entry.rssrc/cli/subcommands/shutdown_cmd.rssrc/lotus_json/signature.rssrc/cid_collections/mod.rssrc/message_pool/errors.rssrc/db/parity_db_config.rssrc/chain_sync/network_context.rssrc/message_pool/msgpool/msg_pool.rssrc/message/tests/builder_test.rssrc/libp2p/chain_exchange/message.rssrc/eth/transaction.rssrc/daemon/main.rssrc/lib.rssrc/lotus_json/actors/params/init_params.rssrc/bin/forest-wallet.rssrc/eth/eip_155_transaction.rssrc/chain/snapshot_format.rssrc/libp2p_bitswap/behaviour.rssrc/auth/mod.rssrc/chain_sync/chain_follower.rssrc/lotus_json/vec_u8.rssrc/db/migration/v0_22_1.rssrc/db/tests/mem_test.rssrc/lotus_json/signed_message.rssrc/db/migration/db_migration.rssrc/db/ttl/mod.rssrc/cli/mod.rssrc/cli/subcommands/sync_cmd.rssrc/lotus_json/actors/states/market_state.rssrc/cli/humantoken.rssrc/dev/main.rssrc/beacon/signatures/public_key_impls.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/states/init_state.rssrc/db/car/mod.rssrc/libp2p/behaviour.rssrc/lotus_json/actors/params/cron_params.rssrc/message_pool/msgpool/test_provider.rssrc/lotus_json/vrf_proof.rssrc/cli_shared/logger/mod.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/sector_info.rssrc/db/tests/db_utils/parity.rssrc/message/signed_message.rssrc/lotus_json/actors/params/eam_params.rssrc/db/migration/migration_map.rssrc/interpreter/fvm4.rssrc/chain/store/errors.rssrc/lotus_json/actors/params/market_params.rssrc/cli/subcommands/snapshot_cmd.rssrc/lotus_json/po_st_proof.rssrc/lotus_json/tipset_keys.rssrc/libp2p/keypair.rssrc/lotus_json/actors/params/paych_params.rssrc/ipld/tests/selector_gen_tests.rssrc/cli/subcommands/chain_cmd.rssrc/libp2p/hello/mod.rssrc/lotus_json/actors/params/multisig_params.rssrc/beacon/signatures/mod.rssrc/lotus_json/actors/params/account_params.rssrc/ipld/tests/selector_explore.rssrc/health/mod.rsbenches/car-index.rssrc/libp2p/tests/decode_test.rssrc/chain/store/chain_store.rssrc/libp2p/hello/codec.rssrc/db/car/forest/index/hash.rssrc/lotus_json/receipt.rsinterop-tests/src/tests/mod.rssrc/networks/metrics.rssrc/cid_collections/small_cid_vec.rssrc/libp2p/rpc/mod.rssrc/chain/tests.rssrc/ipld/selector/empty_map.rssrc/message_pool/block_prob.rssrc/db/car/forest.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/interpreter/fvm2.rssrc/db/migration/v0_26_0.rssrc/db/tests/subtests/mod.rssrc/documentation.rssrc/cli/subcommands/wait_api_cmd.rssrc/db/gc/snapshot.rssrc/lotus_json/verifreg_claim.rssrc/lotus_json/actors/states/vesting_funds.rssrc/libp2p_bitswap/store.rssrc/f3/go_ffi.rssrc/eth/eip_1559_transaction.rssrc/beacon/mock_beacon.rssrc/lotus_json/actors/states/reward_state.rssrc/db/parity_db.rssrc/db/db_mode.rssrc/cli/subcommands/auth_cmd.rssrc/daemon/mod.rssrc/libp2p/peer_manager.rssrc/blocks/header/test.rssrc/networks/calibnet/mod.rssrc/genesis/mod.rssrc/lotus_json/actors/params/power_params.rssrc/blocks/mod.rssrc/lotus_json/power_claim.rssrc/lotus_json/actors/params/datacap_params.rssrc/lotus_json/block_header.rssrc/cli_shared/cli/client.rssrc/lotus_json/transient_data.rssrc/beacon/tests/drand.rssrc/fil_cns/mod.rssrc/lotus_json/signature_type.rssrc/lotus_json/actors/params/miner_params.rssrc/libp2p/chain_exchange/provider.rssrc/benchmark_private/mod.rssrc/chain_sync/validation.rssrc/libp2p/mod.rssrc/db/memory.rssrc/networks/actors_bundle.rssrc/message_pool/msgpool/mod.rsinterop-tests/build.rssrc/daemon/db_util.rssrc/cli/subcommands/chain_cmd/prune.rssrc/libp2p_bitswap/internals/event_handlers.rssrc/lotus_json/big_int.rssrc/networks/devnet/mod.rssrc/key_management/wallet.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/blocks/tests/serialization_vectors.rssrc/lotus_json/sector_size.rssrc/chain/weight.rssrc/metrics/db.rssrc/f3/mod.rssrc/cli_shared/mod.rssrc/cli/subcommands/mod.rssrc/lotus_json/registered_po_st_proof.rssrc/lotus_json/arc.rssrc/f3/snapshot.rssrc/daemon/context.rssrc/lotus_json/mod.rssrc/db/migration/void_migration.rssrc/libp2p/hello/message.rssrc/blocks/election_proof.rssrc/interpreter/vm.rssrc/lotus_json/actors/states/account_state.rssrc/message_pool/msgpool/provider.rssrc/message_pool/msgpool/utils.rssrc/cli/subcommands/state_cmd.rssrc/cli_shared/cli/mod.rssrc/lotus_json/key_info.rssrc/lotus_json/vec.rssrc/lotus_json/bytecode_hash.rssrc/ipld/util.rssrc/db/migration/mod.rssrc/cid_collections/hash_map.rssrc/libp2p/chain_exchange/mod.rssrc/blocks/gossip_block.rssrc/fil_cns/weight.rssrc/lotus_json/actors/states/system_state.rssrc/blocks/block.rssrc/cli/subcommands/config_cmd.rssrc/libp2p/service.rssrc/beacon/signatures/signature_impls.rssrc/lotus_json/tombstone.rssrc/dev/subcommands/mod.rssrc/key_management/wallet_helpers.rssrc/eth/mod.rssrc/cli/subcommands/f3_cmd/tests.rsinterop-tests/src/tests/bitswap_go_compat.rssrc/message/mod.rssrc/blocks/tipset.rsbenches/example-benchmark.rssrc/db/tests/db_utils/mod.rssrc/chain_sync/chain_muxer.rssrc/beacon/mod.rssrc/ipld/selector/mod.rssrc/cid_collections/hash_set.rssrc/lotus_json/cid.rssrc/blocks/tests/ticket_test.rssrc/bin/forest.rssrc/db/car/forest/index/mod.rssrc/libp2p/config.rssrc/daemon/bundle.rssrc/networks/mainnet/mod.rssrc/lotus_json/miner_info.rssrc/fil_cns/validation.rssrc/message_pool/msg_chain.rssrc/lotus_json/actors/states/power_states.rssrc/lotus_json/opt.rssrc/libp2p/rpc/decoder.rssrc/lotus_json/actors/states/datacap_state.rssrc/dev/mod.rssrc/message_pool/msgpool/selection.rssrc/f3/snapshot/tests.rssrc/key_management/mod.rssrc/lotus_json/actors/params/mod.rssrc/libp2p/discovery.rssrc/lotus_json/ipld.rssrc/db/mod.rssrc/lotus_json/padded_piece_size.rsinterop-tests/src/lib.rssrc/lotus_json/miner_power.rssrc/benchmark_private/tipset_validation.rssrc/key_management/keystore.rssrc/libp2p_bitswap/internals/mod.rssrc/chain_sync/bad_block_cache.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/duration.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/nonempty.rssrc/db/tests/parity_test.rssrc/message/chain_message.rssrc/blocks/header.rsinterop-tests/src/tests/kad_go_compat.rssrc/lotus_json/ticket.rssrc/db/blockstore_with_write_buffer.rssrc/db/blockstore_with_read_cache.rssrc/interpreter/mod.rssrc/cli/subcommands/f3_cmd.rssrc/lotus_json/actors/states/cron_state.rssrc/db/car/any.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/address.rssrc/libp2p_bitswap/tests/request_manager.rssrc/libp2p/chain_exchange/behaviour.rssrc/cli_shared/cli/completion_cmd.rssrc/db/car/plain.rssrc/libp2p/metrics.rssrc/interpreter/fvm3.rssrc/libp2p_bitswap/bitswap_pb.rssrc/message_pool/config.rssrc/lotus_json/actors/states/miner_state.rssrc/interpreter/errors.rssrc/libp2p_bitswap/message.rssrc/lotus_json/token_state.rssrc/db/gc/mod.rssrc/lotus_json/election_proof.rssrc/libp2p/hello/behaviour.rssrc/chain/mod.rssrc/chain/store/base_fee.rssrc/cli/main.rssrc/lotus_json/bit_field.rssrc/libp2p/gossip_params.rssrc/cli/subcommands/mpool_cmd.rssrc/lotus_json/actors/params/evm_params.rssrc/lotus_json/message.rssrc/beacon/drand.rssrc/libp2p_bitswap/internals/codec.rssrc/libp2p/ping.rssrc/ipld/tests/cbor_test.rssrc/chain_sync/mod.rssrc/message_pool/msgpool/metrics.rssrc/ipld/mod.rssrc/lotus_json/beneficiary_term.rssrc/message_pool/mod.rssrc/libp2p_bitswap/mod.rssrc/blocks/ticket.rssrc/metrics/mod.rssrc/lotus_json/beacon_entry.rsinterop-tests/src/tests/go_ffi.rssrc/cli/subcommands/net_cmd.rssrc/beacon/beacon_entries.rssrc/lotus_json/raw_bytes.rssrc/lotus_json/token_amount.rssrc/lotus_json/gossip_block.rssrc/networks/butterflynet/mod.rssrc/lotus_json/hash_map.rsbenches/tipset-validation.rs
📚 Learning: 2026-01-05T12:56:13.802Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6381
File: src/lotus_json/actors/states/evm_state.rs:41-44
Timestamp: 2026-01-05T12:56:13.802Z
Learning: In Rust codebases (e.g., Forest), do not add #[cfg(test)] to functions already annotated with #[test]. The #[test] attribute ensures the function is compiled only for tests, so a separate #[cfg(test)] is redundant and can be removed if present. Apply this check to all Rust files that contain #[test] functions.
Applied to files:
src/bin/forest-tool.rssrc/chain/store/index.rssrc/cli/subcommands/chain_cmd/list.rssrc/lotus_json/pending_beneficiary_change.rssrc/chain/store/tipset_tracker.rssrc/db/car/many.rssrc/bin/forest-cli.rssrc/chain_sync/tipset_syncer.rssrc/networks/drand.rssrc/lotus_json/allocation.rssrc/chain_sync/metrics.rssrc/chain_sync/sync_status.rssrc/lotus_json/actors/states/evm_state.rssrc/libp2p_bitswap/metrics.rssrc/beacon/signatures/tests.rssrc/eth/homestead_transaction.rssrc/libp2p_bitswap/request_manager.rssrc/lotus_json/actor_state.rssrc/chain/store/mod.rssrc/blocks/vrf_proof.rssrc/cli/subcommands/healthcheck_cmd.rssrc/chain_sync/consensus.rssrc/cli_shared/cli/config.rssrc/lotus_json/filter_estimate.rsbuild.rssrc/bin/forest-dev.rssrc/lotus_json/extended_sector_info.rssrc/cli/subcommands/info_cmd.rssrc/libp2p_bitswap/internals/prefix.rssrc/blocks/chain4u.rssrc/health/endpoints.rssrc/db/either.rssrc/cli_shared/snapshot.rssrc/key_management/errors.rssrc/lotus_json/entry.rssrc/cli/subcommands/shutdown_cmd.rssrc/lotus_json/signature.rssrc/cid_collections/mod.rssrc/message_pool/errors.rssrc/db/parity_db_config.rssrc/chain_sync/network_context.rssrc/message_pool/msgpool/msg_pool.rssrc/message/tests/builder_test.rssrc/libp2p/chain_exchange/message.rssrc/eth/transaction.rssrc/daemon/main.rssrc/lib.rssrc/lotus_json/actors/params/init_params.rssrc/bin/forest-wallet.rssrc/eth/eip_155_transaction.rssrc/chain/snapshot_format.rssrc/libp2p_bitswap/behaviour.rssrc/auth/mod.rssrc/chain_sync/chain_follower.rssrc/lotus_json/vec_u8.rssrc/db/migration/v0_22_1.rssrc/db/tests/mem_test.rssrc/lotus_json/signed_message.rssrc/db/migration/db_migration.rssrc/db/ttl/mod.rssrc/cli/mod.rssrc/cli/subcommands/sync_cmd.rssrc/lotus_json/actors/states/market_state.rssrc/cli/humantoken.rssrc/dev/main.rssrc/beacon/signatures/public_key_impls.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/states/init_state.rssrc/db/car/mod.rssrc/libp2p/behaviour.rssrc/lotus_json/actors/params/cron_params.rssrc/message_pool/msgpool/test_provider.rssrc/lotus_json/vrf_proof.rssrc/cli_shared/logger/mod.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/sector_info.rssrc/db/tests/db_utils/parity.rssrc/message/signed_message.rssrc/lotus_json/actors/params/eam_params.rssrc/db/migration/migration_map.rssrc/interpreter/fvm4.rssrc/chain/store/errors.rssrc/lotus_json/actors/params/market_params.rssrc/cli/subcommands/snapshot_cmd.rssrc/lotus_json/po_st_proof.rssrc/lotus_json/tipset_keys.rssrc/libp2p/keypair.rssrc/lotus_json/actors/params/paych_params.rssrc/ipld/tests/selector_gen_tests.rssrc/cli/subcommands/chain_cmd.rssrc/libp2p/hello/mod.rssrc/lotus_json/actors/params/multisig_params.rssrc/beacon/signatures/mod.rssrc/lotus_json/actors/params/account_params.rssrc/ipld/tests/selector_explore.rssrc/health/mod.rsbenches/car-index.rssrc/libp2p/tests/decode_test.rssrc/chain/store/chain_store.rssrc/libp2p/hello/codec.rssrc/db/car/forest/index/hash.rssrc/lotus_json/receipt.rsinterop-tests/src/tests/mod.rssrc/networks/metrics.rssrc/cid_collections/small_cid_vec.rssrc/libp2p/rpc/mod.rssrc/chain/tests.rssrc/ipld/selector/empty_map.rssrc/message_pool/block_prob.rssrc/db/car/forest.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/interpreter/fvm2.rssrc/db/migration/v0_26_0.rssrc/db/tests/subtests/mod.rssrc/documentation.rssrc/cli/subcommands/wait_api_cmd.rssrc/db/gc/snapshot.rssrc/lotus_json/verifreg_claim.rssrc/lotus_json/actors/states/vesting_funds.rssrc/libp2p_bitswap/store.rssrc/f3/go_ffi.rssrc/eth/eip_1559_transaction.rssrc/beacon/mock_beacon.rssrc/lotus_json/actors/states/reward_state.rssrc/db/parity_db.rssrc/db/db_mode.rssrc/cli/subcommands/auth_cmd.rssrc/daemon/mod.rssrc/libp2p/peer_manager.rssrc/blocks/header/test.rssrc/networks/calibnet/mod.rssrc/genesis/mod.rssrc/lotus_json/actors/params/power_params.rssrc/blocks/mod.rssrc/lotus_json/power_claim.rssrc/lotus_json/actors/params/datacap_params.rssrc/lotus_json/block_header.rssrc/cli_shared/cli/client.rssrc/lotus_json/transient_data.rssrc/beacon/tests/drand.rssrc/fil_cns/mod.rssrc/lotus_json/signature_type.rssrc/lotus_json/actors/params/miner_params.rssrc/libp2p/chain_exchange/provider.rssrc/benchmark_private/mod.rssrc/chain_sync/validation.rssrc/libp2p/mod.rssrc/db/memory.rssrc/networks/actors_bundle.rssrc/message_pool/msgpool/mod.rsinterop-tests/build.rssrc/daemon/db_util.rssrc/cli/subcommands/chain_cmd/prune.rssrc/libp2p_bitswap/internals/event_handlers.rssrc/lotus_json/big_int.rssrc/networks/devnet/mod.rssrc/key_management/wallet.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/blocks/tests/serialization_vectors.rssrc/lotus_json/sector_size.rssrc/chain/weight.rssrc/metrics/db.rssrc/f3/mod.rssrc/cli_shared/mod.rssrc/cli/subcommands/mod.rssrc/lotus_json/registered_po_st_proof.rssrc/lotus_json/arc.rssrc/f3/snapshot.rssrc/daemon/context.rssrc/lotus_json/mod.rssrc/db/migration/void_migration.rssrc/libp2p/hello/message.rssrc/blocks/election_proof.rssrc/interpreter/vm.rssrc/lotus_json/actors/states/account_state.rssrc/message_pool/msgpool/provider.rssrc/message_pool/msgpool/utils.rssrc/cli/subcommands/state_cmd.rssrc/cli_shared/cli/mod.rssrc/lotus_json/key_info.rssrc/lotus_json/vec.rssrc/lotus_json/bytecode_hash.rssrc/ipld/util.rssrc/db/migration/mod.rssrc/cid_collections/hash_map.rssrc/libp2p/chain_exchange/mod.rssrc/blocks/gossip_block.rssrc/fil_cns/weight.rssrc/lotus_json/actors/states/system_state.rssrc/blocks/block.rssrc/cli/subcommands/config_cmd.rssrc/libp2p/service.rssrc/beacon/signatures/signature_impls.rssrc/lotus_json/tombstone.rssrc/dev/subcommands/mod.rssrc/key_management/wallet_helpers.rssrc/eth/mod.rssrc/cli/subcommands/f3_cmd/tests.rsinterop-tests/src/tests/bitswap_go_compat.rssrc/message/mod.rssrc/blocks/tipset.rsbenches/example-benchmark.rssrc/db/tests/db_utils/mod.rssrc/chain_sync/chain_muxer.rssrc/beacon/mod.rssrc/ipld/selector/mod.rssrc/cid_collections/hash_set.rssrc/lotus_json/cid.rssrc/blocks/tests/ticket_test.rssrc/bin/forest.rssrc/db/car/forest/index/mod.rssrc/libp2p/config.rssrc/daemon/bundle.rssrc/networks/mainnet/mod.rssrc/lotus_json/miner_info.rssrc/fil_cns/validation.rssrc/message_pool/msg_chain.rssrc/lotus_json/actors/states/power_states.rssrc/lotus_json/opt.rssrc/libp2p/rpc/decoder.rssrc/lotus_json/actors/states/datacap_state.rssrc/dev/mod.rssrc/message_pool/msgpool/selection.rssrc/f3/snapshot/tests.rssrc/key_management/mod.rssrc/lotus_json/actors/params/mod.rssrc/libp2p/discovery.rssrc/lotus_json/ipld.rssrc/db/mod.rssrc/lotus_json/padded_piece_size.rsinterop-tests/src/lib.rssrc/lotus_json/miner_power.rssrc/benchmark_private/tipset_validation.rssrc/key_management/keystore.rssrc/libp2p_bitswap/internals/mod.rssrc/chain_sync/bad_block_cache.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/duration.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/nonempty.rssrc/db/tests/parity_test.rssrc/message/chain_message.rssrc/blocks/header.rsinterop-tests/src/tests/kad_go_compat.rssrc/lotus_json/ticket.rssrc/db/blockstore_with_write_buffer.rssrc/db/blockstore_with_read_cache.rssrc/interpreter/mod.rssrc/cli/subcommands/f3_cmd.rssrc/lotus_json/actors/states/cron_state.rssrc/db/car/any.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/address.rssrc/libp2p_bitswap/tests/request_manager.rssrc/libp2p/chain_exchange/behaviour.rssrc/cli_shared/cli/completion_cmd.rssrc/db/car/plain.rssrc/libp2p/metrics.rssrc/interpreter/fvm3.rssrc/libp2p_bitswap/bitswap_pb.rssrc/message_pool/config.rssrc/lotus_json/actors/states/miner_state.rssrc/interpreter/errors.rssrc/libp2p_bitswap/message.rssrc/lotus_json/token_state.rssrc/db/gc/mod.rssrc/lotus_json/election_proof.rssrc/libp2p/hello/behaviour.rssrc/chain/mod.rssrc/chain/store/base_fee.rssrc/cli/main.rssrc/lotus_json/bit_field.rssrc/libp2p/gossip_params.rssrc/cli/subcommands/mpool_cmd.rssrc/lotus_json/actors/params/evm_params.rssrc/lotus_json/message.rssrc/beacon/drand.rssrc/libp2p_bitswap/internals/codec.rssrc/libp2p/ping.rssrc/ipld/tests/cbor_test.rssrc/chain_sync/mod.rssrc/message_pool/msgpool/metrics.rssrc/ipld/mod.rssrc/lotus_json/beneficiary_term.rssrc/message_pool/mod.rssrc/libp2p_bitswap/mod.rssrc/blocks/ticket.rssrc/metrics/mod.rssrc/lotus_json/beacon_entry.rsinterop-tests/src/tests/go_ffi.rssrc/cli/subcommands/net_cmd.rssrc/beacon/beacon_entries.rssrc/lotus_json/raw_bytes.rssrc/lotus_json/token_amount.rssrc/lotus_json/gossip_block.rssrc/networks/butterflynet/mod.rssrc/lotus_json/hash_map.rsbenches/tipset-validation.rs
📚 Learning: 2025-08-18T12:25:29.183Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 5896
File: src/lotus_json/actor_states/methods/verified_reg_actor.rs:133-137
Timestamp: 2025-08-18T12:25:29.183Z
Learning: In Lotus JSON for verified registry actor, the SectorAllocationClaimsLotusJson struct uses "SectorExpiry" as the field name for the expiry field, not "Expiry". The current code with #[serde(rename = "SectorExpiry")] is correct.
Applied to files:
src/lotus_json/pending_beneficiary_change.rssrc/lotus_json/allocation.rssrc/lotus_json/actors/states/evm_state.rssrc/lotus_json/actor_state.rssrc/lotus_json/filter_estimate.rssrc/lotus_json/extended_sector_info.rssrc/lotus_json/entry.rssrc/lotus_json/signature.rssrc/lotus_json/actors/params/init_params.rssrc/chain/snapshot_format.rssrc/lotus_json/vec_u8.rssrc/lotus_json/signed_message.rssrc/lotus_json/actors/states/market_state.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/states/init_state.rssrc/lotus_json/actors/params/cron_params.rssrc/lotus_json/vrf_proof.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/sector_info.rssrc/lotus_json/actors/params/eam_params.rssrc/lotus_json/actors/params/market_params.rssrc/lotus_json/po_st_proof.rssrc/lotus_json/actors/params/paych_params.rssrc/lotus_json/actors/params/multisig_params.rssrc/lotus_json/actors/params/account_params.rssrc/lotus_json/receipt.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/lotus_json/verifreg_claim.rssrc/lotus_json/actors/states/vesting_funds.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/actors/params/power_params.rssrc/lotus_json/power_claim.rssrc/lotus_json/actors/params/datacap_params.rssrc/lotus_json/block_header.rssrc/lotus_json/transient_data.rssrc/lotus_json/signature_type.rssrc/lotus_json/actors/params/miner_params.rssrc/lotus_json/big_int.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/lotus_json/sector_size.rssrc/lotus_json/registered_po_st_proof.rssrc/lotus_json/arc.rssrc/lotus_json/mod.rssrc/lotus_json/actors/states/account_state.rssrc/cli/subcommands/state_cmd.rssrc/lotus_json/key_info.rssrc/lotus_json/vec.rssrc/lotus_json/bytecode_hash.rssrc/lotus_json/actors/states/system_state.rssrc/lotus_json/tombstone.rssrc/lotus_json/cid.rssrc/lotus_json/miner_info.rssrc/lotus_json/actors/states/power_states.rssrc/lotus_json/opt.rssrc/lotus_json/actors/states/datacap_state.rssrc/lotus_json/actors/params/mod.rssrc/lotus_json/ipld.rssrc/lotus_json/padded_piece_size.rssrc/lotus_json/miner_power.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/duration.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/nonempty.rssrc/lotus_json/ticket.rssrc/lotus_json/actors/states/cron_state.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/address.rssrc/lotus_json/actors/states/miner_state.rssrc/lotus_json/token_state.rssrc/lotus_json/election_proof.rssrc/lotus_json/bit_field.rssrc/lotus_json/actors/params/evm_params.rssrc/lotus_json/message.rssrc/lotus_json/beneficiary_term.rssrc/lotus_json/beacon_entry.rssrc/lotus_json/raw_bytes.rssrc/lotus_json/token_amount.rssrc/lotus_json/gossip_block.rssrc/lotus_json/hash_map.rs
📚 Learning: 2025-09-11T16:03:14.328Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 6000
File: src/tool/subcommands/api_cmd/state_decode_params_tests/miner.rs:4-9
Timestamp: 2025-09-11T16:03:14.328Z
Learning: In the Forest codebase's state_decode_params_tests module, common imports like `to_vec`, `TokenAmount`, `Cid`, etc. are centralized in the mod.rs file and made available to submodules through `use super::*;`, eliminating the need for duplicate imports in individual test files.
Applied to files:
src/lotus_json/pending_beneficiary_change.rssrc/lotus_json/allocation.rssrc/lotus_json/actors/states/evm_state.rssrc/eth/homestead_transaction.rssrc/lotus_json/actor_state.rssrc/lotus_json/filter_estimate.rssrc/lotus_json/extended_sector_info.rssrc/db/either.rssrc/lotus_json/signature.rssrc/lotus_json/actors/params/init_params.rssrc/eth/eip_155_transaction.rssrc/lotus_json/vec_u8.rssrc/db/tests/mem_test.rssrc/lotus_json/actors/states/market_state.rssrc/beacon/signatures/public_key_impls.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/states/init_state.rssrc/db/car/mod.rssrc/lotus_json/actors/params/cron_params.rssrc/lotus_json/vrf_proof.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/sector_info.rssrc/lotus_json/actors/params/eam_params.rssrc/lotus_json/actors/params/market_params.rssrc/lotus_json/tipset_keys.rssrc/lotus_json/actors/params/paych_params.rssrc/lotus_json/actors/params/multisig_params.rssrc/lotus_json/actors/params/account_params.rssrc/chain/store/chain_store.rssrc/libp2p/hello/codec.rssrc/cid_collections/small_cid_vec.rssrc/chain/tests.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/lotus_json/actors/states/vesting_funds.rssrc/libp2p_bitswap/store.rssrc/lotus_json/actors/states/reward_state.rssrc/blocks/header/test.rssrc/lotus_json/actors/params/power_params.rssrc/lotus_json/transient_data.rssrc/lotus_json/signature_type.rssrc/lotus_json/actors/params/miner_params.rssrc/benchmark_private/mod.rssrc/lotus_json/big_int.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/blocks/tests/serialization_vectors.rssrc/lotus_json/sector_size.rssrc/lotus_json/arc.rssrc/f3/snapshot.rssrc/lotus_json/actors/states/account_state.rssrc/lotus_json/key_info.rssrc/lotus_json/vec.rssrc/lotus_json/bytecode_hash.rssrc/lotus_json/actors/states/system_state.rssrc/beacon/signatures/signature_impls.rssrc/lotus_json/tombstone.rssrc/cli/subcommands/f3_cmd/tests.rssrc/cid_collections/hash_set.rssrc/lotus_json/cid.rssrc/lotus_json/miner_info.rssrc/lotus_json/opt.rssrc/lotus_json/actors/states/datacap_state.rssrc/f3/snapshot/tests.rssrc/lotus_json/actors/params/mod.rssrc/lotus_json/padded_piece_size.rsinterop-tests/src/lib.rssrc/lotus_json/miner_power.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/duration.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/nonempty.rssrc/cli/subcommands/f3_cmd.rssrc/lotus_json/actors/states/cron_state.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/address.rssrc/libp2p_bitswap/tests/request_manager.rssrc/lotus_json/actors/states/miner_state.rssrc/lotus_json/token_state.rssrc/lotus_json/bit_field.rssrc/lotus_json/message.rssrc/lotus_json/beneficiary_term.rssrc/lotus_json/raw_bytes.rssrc/lotus_json/token_amount.rssrc/lotus_json/gossip_block.rssrc/lotus_json/hash_map.rs
📚 Learning: 2025-10-17T09:36:15.757Z
Learnt from: elmattic
Repo: ChainSafe/forest PR: 6128
File: src/ipld/util.rs:23-30
Timestamp: 2025-10-17T09:36:15.757Z
Learning: Always run `cargo check` or `cargo build` to verify actual compilation errors in the Forest codebase before flagging them as issues. Do not rely solely on documentation or assumptions about trait implementations.
Applied to files:
src/bin/forest-cli.rssrc/db/car/mod.rssrc/db/car/forest/index/hash.rssrc/benchmark_private/mod.rs
📚 Learning: 2026-01-05T13:02:14.604Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6381
File: src/shim/actors/builtin/cron/mod.rs:47-47
Timestamp: 2026-01-05T13:02:14.604Z
Learning: The Entry enum in src/shim/actors/builtin/cron/mod.rs cannot derive Eq because it wraps external fil_actor_cron_state::vX::Entry types (v8-v17) that don't implement Eq. Only PartialEq can be derived for this enum due to this external dependency constraint.
Applied to files:
src/beacon/signatures/tests.rssrc/cli/subcommands/healthcheck_cmd.rssrc/cli/subcommands/info_cmd.rssrc/cli_shared/snapshot.rssrc/lotus_json/entry.rssrc/chain_sync/network_context.rssrc/libp2p/behaviour.rssrc/cli_shared/logger/mod.rssrc/db/migration/migration_map.rssrc/db/db_mode.rssrc/libp2p/peer_manager.rssrc/blocks/mod.rssrc/lotus_json/block_header.rssrc/cli_shared/cli/client.rssrc/fil_cns/mod.rssrc/chain_sync/validation.rssrc/libp2p/service.rssrc/key_management/wallet_helpers.rssrc/blocks/tipset.rssrc/lotus_json/actors/states/power_states.rssrc/libp2p/rpc/decoder.rssrc/libp2p/discovery.rssrc/key_management/keystore.rssrc/lotus_json/actors/states/cron_state.rssrc/libp2p/hello/behaviour.rssrc/libp2p/ping.rssrc/lotus_json/beacon_entry.rs
📚 Learning: 2025-08-25T13:35:24.230Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5969
File: src/tool/subcommands/snapshot_cmd.rs:412-412
Timestamp: 2025-08-25T13:35:24.230Z
Learning: In src/tool/subcommands/snapshot_cmd.rs, the +1 in `last_epoch = ts.epoch() - epochs as i64 + 1` fixes an off-by-1 bug where specifying --check-stateroots=N would validate N+1 epochs instead of N epochs, causing out-of-bounds errors when the snapshot contains only N recent state roots.
Applied to files:
src/cli/subcommands/healthcheck_cmd.rssrc/cli/subcommands/info_cmd.rssrc/cli/subcommands/sync_cmd.rssrc/cli/subcommands/snapshot_cmd.rssrc/cli/subcommands/chain_cmd/prune.rssrc/cli/subcommands/state_cmd.rssrc/db/gc/mod.rs
📚 Learning: 2025-08-08T12:11:55.266Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5867
File: src/ipld/util.rs:461-487
Timestamp: 2025-08-08T12:11:55.266Z
Learning: Forest (src/ipld/util.rs, Rust): In UnorderedChainStream::poll_next, dropping `extract_sender` (when no more tipsets and the extract queue is empty) is the intended shutdown signal for workers. Any subsequent attempt to enqueue work after this drop is a logic error and should be treated as an error; do not change `send()` to ignore a missing sender.
Applied to files:
src/chain_sync/consensus.rssrc/message_pool/errors.rssrc/interpreter/fvm4.rssrc/ipld/tests/selector_gen_tests.rssrc/ipld/tests/selector_explore.rssrc/interpreter/fvm2.rssrc/blocks/mod.rssrc/benchmark_private/mod.rssrc/daemon/db_util.rssrc/ipld/util.rssrc/fil_cns/weight.rssrc/libp2p/rpc/decoder.rssrc/interpreter/fvm3.rssrc/chain/store/base_fee.rssrc/cli/subcommands/mpool_cmd.rssrc/libp2p/ping.rs
📚 Learning: 2025-08-04T13:36:22.993Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5835
File: src/chain/tests.rs:58-76
Timestamp: 2025-08-04T13:36:22.993Z
Learning: In the Forest codebase, `Vec<u8>` can be used as an `AsyncWrite` implementation in test contexts. The user confirmed that tests using `&mut Vec<u8>` with `export` and `export_v2` functions compile and pass both locally and on CI.
Applied to files:
build.rssrc/db/tests/mem_test.rssrc/blocks/tests/serialization_vectors.rssrc/f3/snapshot.rssrc/cli/subcommands/config_cmd.rsinterop-tests/src/lib.rssrc/cli/subcommands/f3_cmd.rssrc/libp2p_bitswap/tests/request_manager.rs
📚 Learning: 2025-08-04T13:36:22.993Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5835
File: src/chain/tests.rs:58-76
Timestamp: 2025-08-04T13:36:22.993Z
Learning: In projects using tokio with "full" features enabled, `Vec<u8>` implements `AsyncWrite` through blanket implementations provided by Tokio. This allows `&mut Vec<u8>` to be used directly with async write operations without needing additional wrapper types like `SyncIoBridge`.
Applied to files:
build.rssrc/cli/subcommands/config_cmd.rs
📚 Learning: 2025-08-28T12:52:46.927Z
Learnt from: LesnyRumcajs
Repo: ChainSafe/forest PR: 6011
File: src/cli/main.rs:18-25
Timestamp: 2025-08-28T12:52:46.927Z
Learning: In Forest CLI (src/cli/main.rs), the early RPC network check before Cli::parse_from() does not block help/version commands because clap processes these internally before reaching the RPC call. LesnyRumcajs confirmed this implementation works correctly and that RPC call failures are acceptable in this context.
Applied to files:
src/cli/subcommands/shutdown_cmd.rssrc/daemon/main.rssrc/dev/main.rssrc/cli/subcommands/wait_api_cmd.rssrc/cli_shared/mod.rssrc/dev/subcommands/mod.rssrc/cli_shared/cli/completion_cmd.rs
📚 Learning: 2025-09-02T08:46:04.937Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 5996
File: src/lotus_json/actor_states/methods/paych_params.rs:269-277
Timestamp: 2025-09-02T08:46:04.937Z
Learning: In payment channel actor Lotus JSON serialization, empty merges should be serialized as `null` (not an empty array `[]`) to maintain compatibility with Lotus behavior.
Applied to files:
src/chain/snapshot_format.rssrc/lotus_json/verifreg_claim.rssrc/lotus_json/actors/params/datacap_params.rssrc/cli/subcommands/state_cmd.rssrc/lotus_json/raw_bytes.rs
📚 Learning: 2025-08-11T12:42:42.848Z
Learnt from: elmattic
Repo: ChainSafe/forest PR: 5836
File: src/tool/subcommands/api_cmd/api_run_tests.rs:186-190
Timestamp: 2025-08-11T12:42:42.848Z
Learning: In the Forest project's test infrastructure (specifically in `src/tool/subcommands/api_cmd/api_run_tests.rs`), the team prefers to use only `ws` (non-secure WebSocket) connections for simplicity in their stateful API test scenarios, as security is not a concern in their testing context.
Applied to files:
src/db/tests/mem_test.rssrc/db/car/mod.rs
📚 Learning: 2025-08-08T12:10:45.218Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5867
File: src/ipld/util.rs:553-558
Timestamp: 2025-08-08T12:10:45.218Z
Learning: Forest pins Rust toolchain to 1.89.0 via rust-toolchain.toml; features stabilized in 1.88 (e.g., let-chains) are acceptable in this codebase.
Applied to files:
src/db/car/mod.rssrc/cli_shared/logger/mod.rssrc/libp2p/rpc/decoder.rs
📚 Learning: 2025-08-07T13:39:36.962Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5886
File: interop-tests/src/tests/go_app/gen.go:88-90
Timestamp: 2025-08-07T13:39:36.962Z
Learning: Skip reviewing auto-generated files marked with "Generated by rust2go. Please DO NOT edit this C part manually." as these should not be manually edited and any issues should be addressed in the code generation tool or source templates instead.
Applied to files:
src/db/tests/subtests/mod.rssrc/f3/go_ffi.rssrc/cli_shared/cli/client.rsinterop-tests/src/tests/bitswap_go_compat.rssrc/db/car/any.rsinterop-tests/src/tests/go_ffi.rs
📚 Learning: 2025-09-02T08:44:08.346Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 5996
File: src/lotus_json/actor_states/methods/paych_params.rs:56-58
Timestamp: 2025-09-02T08:44:08.346Z
Learning: In Lotus JSON for payment channel SignedVoucher, the secret_pre_image field should use serde rename to "SecretHash" (not "SecretPreImage") for Lotus API compatibility, even though the internal struct field is named SecretPreimage. This matches the actual JSON format used by Lotus.
Applied to files:
src/lotus_json/actors/params/datacap_params.rs
📚 Learning: 2025-09-02T10:05:34.350Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 5923
File: src/rpc/registry/actors/miner.rs:221-223
Timestamp: 2025-09-02T10:05:34.350Z
Learning: For miner actor ChangeOwnerAddress and ChangeOwnerAddressExported methods: versions 8-10 use bare Address as parameter type, while versions 11+ use ChangeOwnerAddressParams. This reflects the evolution of the Filecoin miner actor parameter structures across versions.
Applied to files:
src/lotus_json/actors/params/miner_params.rs
📚 Learning: 2025-10-17T14:24:47.046Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6167
File: src/tool/subcommands/state_compute_cmd.rs:89-91
Timestamp: 2025-10-17T14:24:47.046Z
Learning: In `src/tool/subcommands/state_compute_cmd.rs`, when using `ReadOpsTrackingStore` to generate minimal snapshots, `HEAD_KEY` should be written to `db.tracker` (not `db` itself) before calling `export_forest_car()`, because the export reads from the tracker MemoryDB which accumulates only the accessed data during computation.
Applied to files:
src/benchmark_private/mod.rssrc/daemon/bundle.rs
📚 Learning: 2025-08-11T14:00:47.060Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5886
File: src/daemon/db_util.rs:236-259
Timestamp: 2025-08-11T14:00:47.060Z
Learning: In Forest's snapshot import (`src/daemon/db_util.rs`), when F3 CID is present in snapshot metadata but the actual F3 data is missing, this should cause a hard error as it indicates snapshot corruption. Only errors during the F3 import process itself (after data is successfully retrieved) should be non-fatal and logged.
Applied to files:
src/benchmark_private/mod.rs
📚 Learning: 2025-10-14T14:31:20.565Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6161
File: src/tool/subcommands/db_cmd.rs:123-144
Timestamp: 2025-10-14T14:31:20.565Z
Learning: In Rust Forest codebase, `BlockstoreWithWriteBuffer` implements the `Drop` trait (at src/db/blockstore_with_write_buffer.rs) which automatically calls `flush_buffer()` to persist buffered writes when the object goes out of scope. Explicit flush calls are not required before dropping the wrapper.
Applied to files:
src/db/mod.rssrc/db/blockstore_with_write_buffer.rs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
- GitHub Check: Build MacOS
- GitHub Check: cargo-publish-dry-run
- GitHub Check: Build Ubuntu
- GitHub Check: All lint checks
- GitHub Check: Build forest binaries on Linux AMD64
- GitHub Check: Coverage
- GitHub Check: tests-release
f5b4cf2 to
2af91a5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
mise-tasks/add_license.sh (2)
13-14: Add error handling for file operations.The file modification logic lacks error handling, which could lead to data loss if
scripts/copyright.txtdoesn't exist or if write operations fail. Additionally, using a generic "temp" filename could cause race conditions with concurrent script executions.🛡️ Proposed improvements for robustness
+# Validate copyright.txt exists +if [[ ! -f ./scripts/copyright.txt ]]; then + echo "Error: ./scripts/copyright.txt not found" + exit 1 +fi + ret=0 for file in $(git grep --cached -Il '' -- '*.rs' ':!*src/utils/encoding/fallback_de_ipld_dagcbor.rs'); do header=$(head -2 "$file" | tr -d '\n') if ! echo "$header" | grep -q "$PAT_APA"; then echo "$file was missing header" - cat ./scripts/copyright.txt "$file" > temp - mv temp "$file" + temp_file=$(mktemp) || { echo "Failed to create temp file"; exit 1; } + if cat ./scripts/copyright.txt "$file" > "$temp_file"; then + mv "$temp_file" "$file" || { echo "Failed to update $file"; rm -f "$temp_file"; exit 1; } + else + echo "Failed to add header to $file" + rm -f "$temp_file" + exit 1 + fi ret=1 fi done
9-9: The pathspec pattern works correctly but uses a non-standard format.Both
:!*src/utils/encoding/fallback_de_ipld_dagcbor.rsand the suggested:!src/utils/encoding/fallback_de_ipld_dagcbor.rsproduce identical results and correctly exclude the intended file. While the current pattern is functionally correct, adopting the standard format:!src/utils/encoding/fallback_de_ipld_dagcbor.rsis preferred for consistency with git conventions and clarity.
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (276)
benches/car-index.rsbenches/example-benchmark.rsbenches/tipset-validation.rsbuild.rsinterop-tests/build.rsinterop-tests/src/lib.rsinterop-tests/src/tests/bitswap_go_compat.rsinterop-tests/src/tests/go_ffi.rsinterop-tests/src/tests/kad_go_compat.rsinterop-tests/src/tests/mod.rsmise-tasks/add_license.shscripts/copyright.txtsrc/auth/mod.rssrc/beacon/beacon_entries.rssrc/beacon/drand.rssrc/beacon/mock_beacon.rssrc/beacon/mod.rssrc/beacon/signatures/mod.rssrc/beacon/signatures/public_key_impls.rssrc/beacon/signatures/signature_impls.rssrc/beacon/signatures/tests.rssrc/beacon/tests/drand.rssrc/benchmark_private/mod.rssrc/benchmark_private/tipset_validation.rssrc/bin/forest-cli.rssrc/bin/forest-dev.rssrc/bin/forest-tool.rssrc/bin/forest-wallet.rssrc/bin/forest.rssrc/blocks/block.rssrc/blocks/chain4u.rssrc/blocks/election_proof.rssrc/blocks/gossip_block.rssrc/blocks/header.rssrc/blocks/header/test.rssrc/blocks/mod.rssrc/blocks/tests/serialization_vectors.rssrc/blocks/tests/ticket_test.rssrc/blocks/ticket.rssrc/blocks/tipset.rssrc/blocks/vrf_proof.rssrc/chain/mod.rssrc/chain/snapshot_format.rssrc/chain/store/base_fee.rssrc/chain/store/chain_store.rssrc/chain/store/errors.rssrc/chain/store/index.rssrc/chain/store/mod.rssrc/chain/store/tipset_tracker.rssrc/chain/tests.rssrc/chain/weight.rssrc/chain_sync/bad_block_cache.rssrc/chain_sync/chain_follower.rssrc/chain_sync/chain_muxer.rssrc/chain_sync/consensus.rssrc/chain_sync/metrics.rssrc/chain_sync/mod.rssrc/chain_sync/network_context.rssrc/chain_sync/sync_status.rssrc/chain_sync/tipset_syncer.rssrc/chain_sync/validation.rssrc/cid_collections/hash_map.rssrc/cid_collections/hash_set.rssrc/cid_collections/mod.rssrc/cid_collections/small_cid_vec.rssrc/cli/humantoken.rssrc/cli/main.rssrc/cli/mod.rssrc/cli/subcommands/auth_cmd.rssrc/cli/subcommands/chain_cmd.rssrc/cli/subcommands/chain_cmd/list.rssrc/cli/subcommands/chain_cmd/prune.rssrc/cli/subcommands/config_cmd.rssrc/cli/subcommands/f3_cmd.rssrc/cli/subcommands/f3_cmd/tests.rssrc/cli/subcommands/healthcheck_cmd.rssrc/cli/subcommands/info_cmd.rssrc/cli/subcommands/mod.rssrc/cli/subcommands/mpool_cmd.rssrc/cli/subcommands/net_cmd.rssrc/cli/subcommands/shutdown_cmd.rssrc/cli/subcommands/snapshot_cmd.rssrc/cli/subcommands/state_cmd.rssrc/cli/subcommands/sync_cmd.rssrc/cli/subcommands/wait_api_cmd.rssrc/cli_shared/cli/client.rssrc/cli_shared/cli/completion_cmd.rssrc/cli_shared/cli/config.rssrc/cli_shared/cli/mod.rssrc/cli_shared/logger/mod.rssrc/cli_shared/mod.rssrc/cli_shared/snapshot.rssrc/daemon/bundle.rssrc/daemon/context.rssrc/daemon/db_util.rssrc/daemon/main.rssrc/daemon/mod.rssrc/db/blockstore_with_read_cache.rssrc/db/blockstore_with_write_buffer.rssrc/db/car/any.rssrc/db/car/forest.rssrc/db/car/forest/index/hash.rssrc/db/car/forest/index/mod.rssrc/db/car/many.rssrc/db/car/mod.rssrc/db/car/plain.rssrc/db/db_mode.rssrc/db/either.rssrc/db/gc/mod.rssrc/db/gc/snapshot.rssrc/db/memory.rssrc/db/migration/db_migration.rssrc/db/migration/migration_map.rssrc/db/migration/mod.rssrc/db/migration/v0_22_1.rssrc/db/migration/v0_26_0.rssrc/db/migration/void_migration.rssrc/db/mod.rssrc/db/parity_db.rssrc/db/parity_db_config.rssrc/db/tests/db_utils/mod.rssrc/db/tests/db_utils/parity.rssrc/db/tests/mem_test.rssrc/db/tests/parity_test.rssrc/db/tests/subtests/mod.rssrc/db/ttl/mod.rssrc/dev/main.rssrc/dev/mod.rssrc/dev/subcommands/mod.rssrc/documentation.rssrc/eth/eip_1559_transaction.rssrc/eth/eip_155_transaction.rssrc/eth/homestead_transaction.rssrc/eth/mod.rssrc/eth/transaction.rssrc/f3/go_ffi.rssrc/f3/mod.rssrc/f3/snapshot.rssrc/f3/snapshot/tests.rssrc/fil_cns/mod.rssrc/fil_cns/validation.rssrc/fil_cns/weight.rssrc/genesis/mod.rssrc/health/endpoints.rssrc/health/mod.rssrc/interpreter/errors.rssrc/interpreter/fvm2.rssrc/interpreter/fvm3.rssrc/interpreter/fvm4.rssrc/interpreter/mod.rssrc/interpreter/vm.rssrc/ipld/mod.rssrc/ipld/selector/empty_map.rssrc/ipld/selector/mod.rssrc/ipld/tests/cbor_test.rssrc/ipld/tests/selector_explore.rssrc/ipld/tests/selector_gen_tests.rssrc/ipld/util.rssrc/key_management/errors.rssrc/key_management/keystore.rssrc/key_management/mod.rssrc/key_management/wallet.rssrc/key_management/wallet_helpers.rssrc/lib.rssrc/libp2p/behaviour.rssrc/libp2p/chain_exchange/behaviour.rssrc/libp2p/chain_exchange/message.rssrc/libp2p/chain_exchange/mod.rssrc/libp2p/chain_exchange/provider.rssrc/libp2p/config.rssrc/libp2p/discovery.rssrc/libp2p/gossip_params.rssrc/libp2p/hello/behaviour.rssrc/libp2p/hello/codec.rssrc/libp2p/hello/message.rssrc/libp2p/hello/mod.rssrc/libp2p/keypair.rssrc/libp2p/metrics.rssrc/libp2p/mod.rssrc/libp2p/peer_manager.rssrc/libp2p/ping.rssrc/libp2p/rpc/decoder.rssrc/libp2p/rpc/mod.rssrc/libp2p/service.rssrc/libp2p/tests/decode_test.rssrc/libp2p_bitswap/behaviour.rssrc/libp2p_bitswap/bitswap_pb.rssrc/libp2p_bitswap/internals/codec.rssrc/libp2p_bitswap/internals/event_handlers.rssrc/libp2p_bitswap/internals/mod.rssrc/libp2p_bitswap/internals/prefix.rssrc/libp2p_bitswap/message.rssrc/libp2p_bitswap/metrics.rssrc/libp2p_bitswap/mod.rssrc/libp2p_bitswap/request_manager.rssrc/libp2p_bitswap/store.rssrc/libp2p_bitswap/tests/request_manager.rssrc/lotus_json/actor_state.rssrc/lotus_json/actors/mod.rssrc/lotus_json/actors/params/account_params.rssrc/lotus_json/actors/params/cron_params.rssrc/lotus_json/actors/params/datacap_params.rssrc/lotus_json/actors/params/eam_params.rssrc/lotus_json/actors/params/evm_params.rssrc/lotus_json/actors/params/init_params.rssrc/lotus_json/actors/params/market_params.rssrc/lotus_json/actors/params/miner_params.rssrc/lotus_json/actors/params/mod.rssrc/lotus_json/actors/params/multisig_params.rssrc/lotus_json/actors/params/paych_params.rssrc/lotus_json/actors/params/power_params.rssrc/lotus_json/actors/params/reward_params.rssrc/lotus_json/actors/params/verified_reg_params.rssrc/lotus_json/actors/states/account_state.rssrc/lotus_json/actors/states/cron_state.rssrc/lotus_json/actors/states/datacap_state.rssrc/lotus_json/actors/states/evm_state.rssrc/lotus_json/actors/states/init_state.rssrc/lotus_json/actors/states/market_state.rssrc/lotus_json/actors/states/miner_state.rssrc/lotus_json/actors/states/mod.rssrc/lotus_json/actors/states/multisig_state.rssrc/lotus_json/actors/states/payment_channel_state.rssrc/lotus_json/actors/states/power_states.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/actors/states/system_state.rssrc/lotus_json/actors/states/verified_reg_state.rssrc/lotus_json/actors/states/vesting_funds.rssrc/lotus_json/address.rssrc/lotus_json/allocation.rssrc/lotus_json/arc.rssrc/lotus_json/beacon_entry.rssrc/lotus_json/beneficiary_term.rssrc/lotus_json/big_int.rssrc/lotus_json/bit_field.rssrc/lotus_json/block_header.rssrc/lotus_json/bytecode_hash.rssrc/lotus_json/cid.rssrc/lotus_json/duration.rssrc/lotus_json/election_proof.rssrc/lotus_json/entry.rssrc/lotus_json/extended_sector_info.rssrc/lotus_json/filter_estimate.rssrc/lotus_json/gossip_block.rssrc/lotus_json/hash_map.rssrc/lotus_json/ipld.rssrc/lotus_json/key_info.rssrc/lotus_json/message.rssrc/lotus_json/miner_info.rssrc/lotus_json/miner_power.rssrc/lotus_json/mod.rssrc/lotus_json/nonempty.rssrc/lotus_json/opt.rssrc/lotus_json/padded_piece_size.rssrc/lotus_json/pending_beneficiary_change.rssrc/lotus_json/po_st_proof.rssrc/lotus_json/power_claim.rssrc/lotus_json/raw_bytes.rssrc/lotus_json/receipt.rssrc/lotus_json/registered_po_st_proof.rssrc/lotus_json/registered_seal_proof.rssrc/lotus_json/sector_info.rssrc/lotus_json/sector_size.rssrc/lotus_json/signature.rssrc/lotus_json/signature_type.rssrc/lotus_json/signed_message.rssrc/lotus_json/ticket.rssrc/lotus_json/tipset_keys.rssrc/lotus_json/token_amount.rssrc/lotus_json/token_state.rssrc/lotus_json/tombstone.rssrc/lotus_json/transient_data.rssrc/lotus_json/vec.rssrc/lotus_json/vec_u8.rssrc/lotus_json/verifreg_claim.rssrc/lotus_json/vrf_proof.rs
✅ Files skipped from review due to trivial changes (84)
- src/eth/homestead_transaction.rs
- src/db/car/plain.rs
- src/db/car/forest.rs
- src/lotus_json/verifreg_claim.rs
- src/interpreter/errors.rs
- src/cli_shared/cli/completion_cmd.rs
- src/chain/store/tipset_tracker.rs
- src/libp2p/ping.rs
- src/libp2p/tests/decode_test.rs
- src/cid_collections/mod.rs
- src/beacon/mock_beacon.rs
- src/lotus_json/padded_piece_size.rs
- src/blocks/chain4u.rs
- src/libp2p_bitswap/internals/prefix.rs
- src/db/migration/db_migration.rs
- src/beacon/drand.rs
- src/lotus_json/miner_info.rs
- src/libp2p/chain_exchange/mod.rs
- src/key_management/wallet.rs
- src/lotus_json/key_info.rs
- src/chain_sync/validation.rs
- src/db/mod.rs
- src/cli/subcommands/net_cmd.rs
- src/cli/subcommands/auth_cmd.rs
- src/lotus_json/signature.rs
- src/fil_cns/validation.rs
- src/cli/subcommands/healthcheck_cmd.rs
- src/bin/forest-wallet.rs
- src/libp2p_bitswap/message.rs
- src/lotus_json/actors/states/cron_state.rs
- src/libp2p_bitswap/store.rs
- src/libp2p/discovery.rs
- scripts/copyright.txt
- src/lotus_json/ticket.rs
- src/lotus_json/ipld.rs
- src/daemon/mod.rs
- src/db/car/many.rs
- src/lotus_json/cid.rs
- src/chain/store/mod.rs
- src/libp2p_bitswap/internals/codec.rs
- src/lotus_json/vrf_proof.rs
- src/chain/store/chain_store.rs
- src/cli/subcommands/wait_api_cmd.rs
- src/dev/main.rs
- src/libp2p/hello/mod.rs
- src/chain/store/errors.rs
- src/lotus_json/signed_message.rs
- src/libp2p_bitswap/request_manager.rs
- src/cli/subcommands/f3_cmd.rs
- src/interpreter/mod.rs
- src/blocks/vrf_proof.rs
- src/lotus_json/token_amount.rs
- src/bin/forest.rs
- src/lotus_json/bytecode_hash.rs
- src/auth/mod.rs
- src/lotus_json/transient_data.rs
- src/chain_sync/bad_block_cache.rs
- interop-tests/build.rs
- src/chain/store/index.rs
- src/libp2p/rpc/decoder.rs
- src/db/blockstore_with_read_cache.rs
- src/libp2p/service.rs
- benches/example-benchmark.rs
- src/bin/forest-dev.rs
- interop-tests/src/tests/mod.rs
- src/db/tests/parity_test.rs
- src/libp2p/config.rs
- src/daemon/context.rs
- src/lotus_json/signature_type.rs
- interop-tests/src/lib.rs
- src/beacon/signatures/tests.rs
- src/lotus_json/bit_field.rs
- src/ipld/util.rs
- src/lotus_json/beacon_entry.rs
- src/db/gc/mod.rs
- src/daemon/bundle.rs
- src/beacon/signatures/signature_impls.rs
- src/blocks/tests/serialization_vectors.rs
- src/blocks/gossip_block.rs
- src/lotus_json/hash_map.rs
- src/lotus_json/actors/params/miner_params.rs
- src/health/mod.rs
- src/db/migration/v0_26_0.rs
- src/ipld/tests/selector_explore.rs
🚧 Files skipped from review as they are similar to previous changes (157)
- src/eth/eip_1559_transaction.rs
- src/chain/snapshot_format.rs
- src/db/parity_db.rs
- src/ipld/tests/selector_gen_tests.rs
- src/eth/mod.rs
- src/blocks/tipset.rs
- src/lotus_json/tombstone.rs
- src/cli/main.rs
- src/cli_shared/logger/mod.rs
- src/chain_sync/metrics.rs
- src/lotus_json/opt.rs
- src/bin/forest-tool.rs
- src/cli/subcommands/chain_cmd/prune.rs
- src/f3/snapshot.rs
- src/f3/go_ffi.rs
- src/lotus_json/election_proof.rs
- src/db/db_mode.rs
- src/libp2p_bitswap/bitswap_pb.rs
- src/lotus_json/actors/params/evm_params.rs
- src/beacon/tests/drand.rs
- src/interpreter/vm.rs
- src/chain_sync/chain_follower.rs
- src/daemon/main.rs
- src/db/car/forest/index/mod.rs
- src/lotus_json/actors/states/vesting_funds.rs
- src/db/gc/snapshot.rs
- src/cli/subcommands/shutdown_cmd.rs
- src/lotus_json/actors/params/power_params.rs
- src/lotus_json/actors/states/datacap_state.rs
- src/cli/subcommands/chain_cmd.rs
- src/beacon/signatures/mod.rs
- src/lotus_json/vec_u8.rs
- src/fil_cns/mod.rs
- src/lotus_json/actors/states/payment_channel_state.rs
- src/ipld/selector/mod.rs
- src/lotus_json/raw_bytes.rs
- src/lotus_json/actors/states/evm_state.rs
- src/lotus_json/actors/states/mod.rs
- src/lotus_json/actors/states/init_state.rs
- src/lotus_json/actors/params/account_params.rs
- src/lotus_json/filter_estimate.rs
- src/lotus_json/allocation.rs
- src/libp2p_bitswap/metrics.rs
- src/db/ttl/mod.rs
- src/libp2p_bitswap/behaviour.rs
- src/lotus_json/gossip_block.rs
- src/libp2p/keypair.rs
- src/libp2p_bitswap/mod.rs
- src/lotus_json/actors/params/verified_reg_params.rs
- src/key_management/wallet_helpers.rs
- src/lotus_json/po_st_proof.rs
- src/db/migration/void_migration.rs
- src/cid_collections/hash_map.rs
- src/cli/subcommands/mod.rs
- src/f3/mod.rs
- src/genesis/mod.rs
- src/libp2p/chain_exchange/message.rs
- src/lotus_json/actors/params/init_params.rs
- src/cli_shared/cli/mod.rs
- src/ipld/mod.rs
- src/eth/transaction.rs
- interop-tests/src/tests/go_ffi.rs
- src/cli_shared/cli/config.rs
- src/lotus_json/miner_power.rs
- src/libp2p/metrics.rs
- src/cli_shared/snapshot.rs
- src/libp2p_bitswap/internals/event_handlers.rs
- src/blocks/ticket.rs
- src/blocks/mod.rs
- src/cli/subcommands/state_cmd.rs
- src/libp2p/rpc/mod.rs
- src/lotus_json/actors/states/account_state.rs
- src/lotus_json/actors/mod.rs
- src/lotus_json/extended_sector_info.rs
- src/lotus_json/actors/params/market_params.rs
- benches/car-index.rs
- src/lotus_json/actors/params/cron_params.rs
- src/lotus_json/token_state.rs
- src/lotus_json/actors/states/market_state.rs
- src/blocks/tests/ticket_test.rs
- src/libp2p_bitswap/internals/mod.rs
- src/lotus_json/actors/states/power_states.rs
- src/db/migration/mod.rs
- src/cli/subcommands/config_cmd.rs
- src/chain/tests.rs
- src/libp2p_bitswap/tests/request_manager.rs
- src/beacon/beacon_entries.rs
- src/blocks/header/test.rs
- src/lotus_json/beneficiary_term.rs
- src/lotus_json/actors/states/multisig_state.rs
- src/blocks/block.rs
- src/chain/store/base_fee.rs
- src/chain_sync/consensus.rs
- src/interpreter/fvm3.rs
- src/lotus_json/actors/params/paych_params.rs
- src/lotus_json/registered_po_st_proof.rs
- src/libp2p/chain_exchange/provider.rs
- src/cli/subcommands/snapshot_cmd.rs
- src/db/parity_db_config.rs
- src/eth/eip_155_transaction.rs
- src/db/either.rs
- src/lotus_json/sector_size.rs
- src/libp2p/hello/behaviour.rs
- src/cli/subcommands/info_cmd.rs
- src/chain_sync/tipset_syncer.rs
- src/interpreter/fvm2.rs
- src/lotus_json/message.rs
- src/lotus_json/actors/params/eam_params.rs
- src/lotus_json/actors/states/miner_state.rs
- src/libp2p/chain_exchange/behaviour.rs
- src/beacon/mod.rs
- src/chain_sync/mod.rs
- src/lotus_json/actor_state.rs
- src/documentation.rs
- src/lotus_json/nonempty.rs
- interop-tests/src/tests/kad_go_compat.rs
- src/db/migration/migration_map.rs
- src/lotus_json/actors/params/multisig_params.rs
- src/chain_sync/sync_status.rs
- src/lotus_json/actors/states/system_state.rs
- src/cli/subcommands/mpool_cmd.rs
- interop-tests/src/tests/bitswap_go_compat.rs
- src/db/car/forest/index/hash.rs
- src/lotus_json/actors/params/datacap_params.rs
- src/lotus_json/duration.rs
- src/lotus_json/power_claim.rs
- src/key_management/keystore.rs
- src/benchmark_private/tipset_validation.rs
- src/lotus_json/actors/params/reward_params.rs
- src/lotus_json/entry.rs
- src/lotus_json/registered_seal_proof.rs
- src/db/car/any.rs
- src/cli_shared/mod.rs
- benches/tipset-validation.rs
- src/lotus_json/actors/states/verified_reg_state.rs
- src/cli/mod.rs
- src/key_management/mod.rs
- src/health/endpoints.rs
- src/chain/mod.rs
- src/db/blockstore_with_write_buffer.rs
- src/db/migration/v0_22_1.rs
- src/lotus_json/address.rs
- src/db/tests/mem_test.rs
- src/chain_sync/network_context.rs
- src/cli/subcommands/sync_cmd.rs
- src/blocks/header.rs
- src/db/memory.rs
- src/cli/humantoken.rs
- src/ipld/selector/empty_map.rs
- src/libp2p/gossip_params.rs
- src/lotus_json/big_int.rs
- src/lotus_json/sector_info.rs
- src/dev/subcommands/mod.rs
- src/cli_shared/cli/client.rs
- src/lotus_json/actors/params/mod.rs
- src/ipld/tests/cbor_test.rs
- src/cid_collections/small_cid_vec.rs
🧰 Additional context used
🧠 Learnings (16)
📓 Common learnings
Learnt from: LesnyRumcajs
Repo: ChainSafe/forest PR: 5907
File: src/rpc/methods/state.rs:523-570
Timestamp: 2025-08-06T15:44:33.467Z
Learning: LesnyRumcajs prefers to rely on BufWriter's Drop implementation for automatic flushing rather than explicit flush() calls in Forest codebase.
📚 Learning: 2026-01-05T12:54:40.850Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6381
File: src/lotus_json/actors/states/cron_state.rs:8-8
Timestamp: 2026-01-05T12:54:40.850Z
Learning: In Rust code reviews, do not derive Eq for a struct if any field does not implement Eq (e.g., types from external dependencies). If a type like CronStateLotusJson includes fields wrapping external dependencies that lack Eq, derive PartialEq (or implement PartialEq manually) but avoid deriving Eq. This ensures comparisons compile and reflect actual equivalence semantics. When needed, consider implementing custom PartialEq (and possibly Eq) only after ensuring all fields (or wrappers) implement Eq, or keep PartialEq-only if full equality semantics cannot be expressed.
Applied to files:
src/libp2p/mod.rssrc/db/tests/db_utils/mod.rssrc/dev/mod.rssrc/lotus_json/tipset_keys.rssrc/db/tests/subtests/mod.rssrc/chain_sync/chain_muxer.rssrc/f3/snapshot/tests.rssrc/cli/subcommands/chain_cmd/list.rssrc/daemon/db_util.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/mod.rsbuild.rssrc/lotus_json/pending_beneficiary_change.rssrc/lib.rssrc/libp2p/behaviour.rssrc/libp2p/peer_manager.rssrc/fil_cns/weight.rssrc/libp2p/hello/codec.rssrc/libp2p/hello/message.rssrc/lotus_json/vec.rssrc/lotus_json/arc.rssrc/lotus_json/block_header.rssrc/db/car/mod.rssrc/chain/weight.rssrc/db/tests/db_utils/parity.rssrc/bin/forest-cli.rssrc/cid_collections/hash_set.rssrc/benchmark_private/mod.rssrc/key_management/errors.rssrc/lotus_json/receipt.rssrc/blocks/election_proof.rssrc/interpreter/fvm4.rssrc/cli/subcommands/f3_cmd/tests.rssrc/beacon/signatures/public_key_impls.rs
📚 Learning: 2026-01-05T12:56:13.802Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6381
File: src/lotus_json/actors/states/evm_state.rs:41-44
Timestamp: 2026-01-05T12:56:13.802Z
Learning: In Rust codebases (e.g., Forest), do not add #[cfg(test)] to functions already annotated with #[test]. The #[test] attribute ensures the function is compiled only for tests, so a separate #[cfg(test)] is redundant and can be removed if present. Apply this check to all Rust files that contain #[test] functions.
Applied to files:
src/libp2p/mod.rssrc/db/tests/db_utils/mod.rssrc/dev/mod.rssrc/lotus_json/tipset_keys.rssrc/db/tests/subtests/mod.rssrc/chain_sync/chain_muxer.rssrc/f3/snapshot/tests.rssrc/cli/subcommands/chain_cmd/list.rssrc/daemon/db_util.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/mod.rsbuild.rssrc/lotus_json/pending_beneficiary_change.rssrc/lib.rssrc/libp2p/behaviour.rssrc/libp2p/peer_manager.rssrc/fil_cns/weight.rssrc/libp2p/hello/codec.rssrc/libp2p/hello/message.rssrc/lotus_json/vec.rssrc/lotus_json/arc.rssrc/lotus_json/block_header.rssrc/db/car/mod.rssrc/chain/weight.rssrc/db/tests/db_utils/parity.rssrc/bin/forest-cli.rssrc/cid_collections/hash_set.rssrc/benchmark_private/mod.rssrc/key_management/errors.rssrc/lotus_json/receipt.rssrc/blocks/election_proof.rssrc/interpreter/fvm4.rssrc/cli/subcommands/f3_cmd/tests.rssrc/beacon/signatures/public_key_impls.rs
📚 Learning: 2025-08-08T12:10:45.218Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5867
File: src/ipld/util.rs:553-558
Timestamp: 2025-08-08T12:10:45.218Z
Learning: Forest project targets Rust stable >=1.89; features stabilized in 1.88 like let-chains are acceptable in this codebase.
Applied to files:
src/lotus_json/tipset_keys.rssrc/f3/snapshot/tests.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/pending_beneficiary_change.rssrc/lib.rssrc/libp2p/behaviour.rssrc/libp2p/peer_manager.rssrc/libp2p/hello/codec.rssrc/lotus_json/vec.rssrc/lotus_json/arc.rssrc/db/car/mod.rssrc/cid_collections/hash_set.rssrc/benchmark_private/mod.rssrc/key_management/errors.rssrc/interpreter/fvm4.rssrc/cli/subcommands/f3_cmd/tests.rssrc/beacon/signatures/public_key_impls.rs
📚 Learning: 2025-09-11T16:03:14.328Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 6000
File: src/tool/subcommands/api_cmd/state_decode_params_tests/miner.rs:4-9
Timestamp: 2025-09-11T16:03:14.328Z
Learning: In the Forest codebase's state_decode_params_tests module, common imports like `to_vec`, `TokenAmount`, `Cid`, etc. are centralized in the mod.rs file and made available to submodules through `use super::*;`, eliminating the need for duplicate imports in individual test files.
Applied to files:
src/lotus_json/tipset_keys.rssrc/f3/snapshot/tests.rssrc/lotus_json/actors/states/reward_state.rssrc/lotus_json/pending_beneficiary_change.rssrc/libp2p/hello/codec.rssrc/lotus_json/vec.rssrc/lotus_json/arc.rssrc/db/car/mod.rssrc/cid_collections/hash_set.rssrc/benchmark_private/mod.rssrc/cli/subcommands/f3_cmd/tests.rssrc/beacon/signatures/public_key_impls.rs
📚 Learning: 2025-08-08T12:11:55.266Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5867
File: src/ipld/util.rs:461-487
Timestamp: 2025-08-08T12:11:55.266Z
Learning: Forest (src/ipld/util.rs, Rust): In UnorderedChainStream::poll_next, dropping `extract_sender` (when no more tipsets and the extract queue is empty) is the intended shutdown signal for workers. Any subsequent attempt to enqueue work after this drop is a logic error and should be treated as an error; do not change `send()` to ignore a missing sender.
Applied to files:
src/daemon/db_util.rssrc/fil_cns/weight.rssrc/benchmark_private/mod.rssrc/interpreter/fvm4.rs
📚 Learning: 2025-08-18T12:25:29.183Z
Learnt from: akaladarshi
Repo: ChainSafe/forest PR: 5896
File: src/lotus_json/actor_states/methods/verified_reg_actor.rs:133-137
Timestamp: 2025-08-18T12:25:29.183Z
Learning: In Lotus JSON for verified registry actor, the SectorAllocationClaimsLotusJson struct uses "SectorExpiry" as the field name for the expiry field, not "Expiry". The current code with #[serde(rename = "SectorExpiry")] is correct.
Applied to files:
src/lotus_json/actors/states/reward_state.rssrc/lotus_json/mod.rssrc/lotus_json/pending_beneficiary_change.rssrc/lotus_json/vec.rssrc/lotus_json/arc.rssrc/lotus_json/block_header.rssrc/lotus_json/receipt.rs
📚 Learning: 2025-08-04T13:36:22.993Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5835
File: src/chain/tests.rs:58-76
Timestamp: 2025-08-04T13:36:22.993Z
Learning: In the Forest codebase, `Vec<u8>` can be used as an `AsyncWrite` implementation in test contexts. The user confirmed that tests using `&mut Vec<u8>` with `export` and `export_v2` functions compile and pass both locally and on CI.
Applied to files:
build.rs
📚 Learning: 2025-08-04T13:36:22.993Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5835
File: src/chain/tests.rs:58-76
Timestamp: 2025-08-04T13:36:22.993Z
Learning: In projects using tokio with "full" features enabled, `Vec<u8>` implements `AsyncWrite` through blanket implementations provided by Tokio. This allows `&mut Vec<u8>` to be used directly with async write operations without needing additional wrapper types like `SyncIoBridge`.
Applied to files:
build.rs
📚 Learning: 2026-01-05T13:02:14.604Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6381
File: src/shim/actors/builtin/cron/mod.rs:47-47
Timestamp: 2026-01-05T13:02:14.604Z
Learning: The Entry enum in src/shim/actors/builtin/cron/mod.rs cannot derive Eq because it wraps external fil_actor_cron_state::vX::Entry types (v8-v17) that don't implement Eq. Only PartialEq can be derived for this enum due to this external dependency constraint.
Applied to files:
src/libp2p/behaviour.rssrc/libp2p/peer_manager.rssrc/lotus_json/block_header.rs
📚 Learning: 2025-10-17T09:36:15.757Z
Learnt from: elmattic
Repo: ChainSafe/forest PR: 6128
File: src/ipld/util.rs:23-30
Timestamp: 2025-10-17T09:36:15.757Z
Learning: Always run `cargo check` or `cargo build` to verify actual compilation errors in the Forest codebase before flagging them as issues. Do not rely solely on documentation or assumptions about trait implementations.
Applied to files:
src/db/car/mod.rssrc/bin/forest-cli.rssrc/benchmark_private/mod.rs
📚 Learning: 2025-08-11T12:42:42.848Z
Learnt from: elmattic
Repo: ChainSafe/forest PR: 5836
File: src/tool/subcommands/api_cmd/api_run_tests.rs:186-190
Timestamp: 2025-08-11T12:42:42.848Z
Learning: In the Forest project's test infrastructure (specifically in `src/tool/subcommands/api_cmd/api_run_tests.rs`), the team prefers to use only `ws` (non-secure WebSocket) connections for simplicity in their stateful API test scenarios, as security is not a concern in their testing context.
Applied to files:
src/db/car/mod.rs
📚 Learning: 2025-08-08T12:10:45.218Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5867
File: src/ipld/util.rs:553-558
Timestamp: 2025-08-08T12:10:45.218Z
Learning: Forest pins Rust toolchain to 1.89.0 via rust-toolchain.toml; features stabilized in 1.88 (e.g., let-chains) are acceptable in this codebase.
Applied to files:
src/db/car/mod.rs
📚 Learning: 2025-08-07T13:39:15.107Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5886
File: interop-tests/src/tests/go_app/gen.go:29-29
Timestamp: 2025-08-07T13:39:15.107Z
Learning: Auto-generated files like those created by rust2go (indicated by "Generated by rust2go. Please DO NOT edit this C part manually." comment) in the Forest project should be skipped during code review as they are not intended for manual editing.
Applied to files:
src/bin/forest-cli.rs
📚 Learning: 2025-10-17T14:24:47.046Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 6167
File: src/tool/subcommands/state_compute_cmd.rs:89-91
Timestamp: 2025-10-17T14:24:47.046Z
Learning: In `src/tool/subcommands/state_compute_cmd.rs`, when using `ReadOpsTrackingStore` to generate minimal snapshots, `HEAD_KEY` should be written to `db.tracker` (not `db` itself) before calling `export_forest_car()`, because the export reads from the tracker MemoryDB which accumulates only the accessed data during computation.
Applied to files:
src/benchmark_private/mod.rs
📚 Learning: 2025-08-11T14:00:47.060Z
Learnt from: hanabi1224
Repo: ChainSafe/forest PR: 5886
File: src/daemon/db_util.rs:236-259
Timestamp: 2025-08-11T14:00:47.060Z
Learning: In Forest's snapshot import (`src/daemon/db_util.rs`), when F3 CID is present in snapshot metadata but the actual F3 data is missing, this should cause a hard error as it indicates snapshot corruption. Only errors during the F3 import process itself (after data is successfully retrieved) should be non-fatal and logged.
Applied to files:
src/benchmark_private/mod.rs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
- GitHub Check: All lint checks
- GitHub Check: Coverage
- GitHub Check: Build forest binaries on Linux AMD64
- GitHub Check: rubocop
- GitHub Check: Build MacOS
- GitHub Check: tests-release
- GitHub Check: cargo-publish-dry-run
- GitHub Check: Build Ubuntu
🔇 Additional comments (35)
src/db/tests/db_utils/parity.rs (1)
1-1: Header year bump to 2026 looks correct.
No functional impact in this file.src/fil_cns/weight.rs (1)
1-1: Header-only change looks good (year bump to 2026).
No functional impact in this file.src/libp2p/behaviour.rs (1)
1-1: Header year bump looks correct.
No functional impact; aligns with PR objective to update copyright year to 2026.src/libp2p/peer_manager.rs (1)
1-1: Header-only change (year bump) looks good.
No functional impact in this file.src/lotus_json/tipset_keys.rs (1)
1-1: Header year bump looks correct.
Non-functional change only; no concerns.src/beacon/signatures/public_key_impls.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year range has been appropriately updated to 2019-2026 for the new year.
src/lotus_json/block_header.rs (1)
1-1: LGTM!Routine copyright year update for 2026.
src/key_management/errors.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year has been properly updated to 2026, which is appropriate for the new year.
src/bin/forest-cli.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year has been appropriately updated to 2026, consistent with the PR objectives.
src/blocks/election_proof.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year range has been appropriately updated to 2019-2026 for the new year. This is a routine maintenance change with no functional impact.
src/db/tests/db_utils/mod.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2019-2026, consistent with the PR objectives.
src/db/tests/subtests/mod.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2019-2026, consistent with the PR objectives.
src/cli/subcommands/chain_cmd/list.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year has been properly updated to 2026, consistent with the PR objectives.
src/interpreter/fvm4.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year has been properly updated to 2026, aligning with the PR objectives.
src/cid_collections/hash_set.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year range has been appropriately updated to 2019-2026 for the new year.
src/lotus_json/actors/states/reward_state.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year has been appropriately updated to 2026.
src/lotus_json/pending_beneficiary_change.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright year has been properly updated to 2026, consistent with the PR objectives.
src/libp2p/hello/message.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2026.
src/libp2p/mod.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2026.
src/f3/snapshot/tests.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2026.
src/dev/mod.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2026.
src/cli/subcommands/f3_cmd/tests.rs (1)
1-1: LGTM! Copyright year updated correctly.The copyright header has been properly updated to 2026.
src/db/car/mod.rs (1)
1-1: Header-only year bump looks good. No functional impact.src/lib.rs (1)
1-1: Header-only year bump looks good. No functional impact.src/libp2p/hello/codec.rs (1)
1-1: Header-only year bump looks good. No functional impact.src/chain/weight.rs (1)
1-1: Header-only year bump looks good. No functional impact.src/chain_sync/chain_muxer.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
src/lotus_json/arc.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
src/lotus_json/vec.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
src/benchmark_private/mod.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
build.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
src/daemon/db_util.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
src/lotus_json/receipt.rs (1)
1-1: LGTM!Copyright year correctly updated to 2026.
src/lotus_json/mod.rs (1)
1-1: LGTM!The copyright year update to 2026 is correct and appropriate.
mise-tasks/add_license.sh (1)
6-6: LGTM! Year updated correctly.The copyright year pattern has been updated to 2019-2026, which aligns with the PR objective.
Summary of changes
Changes introduced in this pull request:
Reference issue to close (if applicable)
Closes
Other information and links
Change checklist
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.