Skip to content

Conversation

aviggiano
Copy link

@aviggiano aviggiano commented Sep 4, 2025

Fixes #213

Summary by Sourcery

Implement an enumerable extension of TimelockController to allow listing and retrieving scheduled operations and batches.

Enhancements:

  • Introduce TimelockControllerEnumerable contract that extends TimelockController with EnumerableSet to track operations and operation batches
  • Override schedule, scheduleBatch, and cancel functions to maintain enumerable sets and mappings of operations and batches
  • Add view functions to list, count, and fetch operations and batches by index or ID

Tests:

  • Add tests for scheduling, executing, and cancelling individual operations and batches
  • Validate enumeration, retrieval, and revert behavior when operations or batches are not found

Summary by CodeRabbit

  • New Features
    • Added an enumerable timelock controller, enabling users to list and inspect scheduled operations and batches with counts and detailed metadata.
    • Enhanced visibility into the timelock queue, including support for batch operations and cancellations with clear errors for missing items.
  • Tests
    • Added comprehensive test coverage for scheduling, executing, batching, and canceling operations, including time-based behavior.
  • Documentation
    • Introduced governance documentation outlining the enumerable timelock capabilities and usage overview.

@aviggiano aviggiano requested a review from a team as a code owner September 4, 2025 15:31
Copy link

coderabbitai bot commented Sep 4, 2025

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Adds TimelockControllerEnumerable extending OpenZeppelin’s TimelockController to track and enumerate scheduled operations and batches. Introduces Operation and OperationBatch structs, not-found errors, EnumerableSet-backed indexes, and read APIs. Overrides schedule, scheduleBatch, and cancel to keep enumerable state in sync. Includes tests and README entry.

Changes

Cohort / File(s) Summary
Governance Timelock Enumerable Contract
contracts/governance/TimelockControllerEnumerable.sol
New contract extending TimelockController with enumerable tracking for operations and batches; adds structs, errors, constructor; overrides schedule/scheduleBatch/cancel; adds enumeration and query view functions.
Tests for Enumerable Timelock
test/governance/TimelockControllerEnumerable.t.sol
New Forge tests covering scheduling, executing, and canceling single and batch operations; validates enumeration APIs and error reverts; uses vm.warp for delay.
Governance Docs
contracts/governance/README.adoc
Adds README documenting governance extensions and TimelockControllerEnumerable.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Proposer
    participant TLE as TimelockControllerEnumerable
    participant OZTL as TimelockController (base)
    participant IDX as Enumerable Index (sets/maps)

    rect rgba(230,245,255,0.6)
    Proposer->>TLE: schedule(target,value,data,predecessor,salt,delay)
    TLE->>OZTL: schedule(...)
    OZTL-->>TLE: scheduled (id)
    TLE->>IDX: add operation id + metadata
    end

    Note over Proposer,TLE: Batch flow mirrors single via scheduleBatch

    rect rgba(240,255,230,0.6)
    Proposer->>TLE: cancel(id)
    TLE->>OZTL: cancel(id)
    OZTL-->>TLE: canceled
    TLE->>IDX: remove id from sets/maps
    end

    rect rgba(255,245,230,0.6)
    participant Reader
    Reader->>TLE: operations()/operation(id)/counts
    TLE->>IDX: read ids/records
    IDX-->>TLE: data
    TLE-->>Reader: Operation/OperationBatch info
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

A timelocked warren counts each hop,
Operations line up—no need to stop.
Batches burrow, indexes gleam,
Sets keep watch in the on-chain stream.
When cancel drums, they softly part—
Enumerate burrows, on with the art. 🐇⏳

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly and concisely states the primary change, which is the addition of the TimelockControllerEnumerable contract, matching the main purpose of the PR.
Linked Issues Check ✅ Passed The PR fully addresses the objectives of issue #213 by adding on-chain view functions for listing and retrieving both individual operations and operation batches, ensuring clients can directly query pending or scheduled operations without an external indexer.
Out of Scope Changes Check ✅ Passed All code additions, including the new contract, its tests, and documentation, directly relate to implementing the enumerable extension for scheduled operations and do not introduce unrelated changes.
Description Check ✅ Passed The description accurately summarizes the implementation of the enumerable extension, lists the key enhancements and corresponding tests, and relates directly to the changes in the PR.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Tip

🧪 Early access (models): enabled

We are currently testing Sonnet 4.5 code review models, which should lead to better review quality. However, this model may result in higher noise levels in the review comments. Please disable the early access features if the noise level causes any inconvenience.

Note:

  • Public repositories are always opted into early access features.
  • You can enable or disable early access features from the CodeRabbit UI or by updating the CodeRabbit configuration file.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

sourcery-ai bot commented Sep 4, 2025

Reviewer's Guide

Extend the existing TimelockController to support enumeration of scheduled operations and batches by storing operation details in enumerable sets and mappings, overriding schedule/cancel methods to maintain the data structures, exposing view functions for retrieval, and adding unit tests to verify functionality.

File-Level Changes

Change Details Files
Add enumerable operation tracking in a new contract
  • Define Operation and OperationBatch structs
  • Use EnumerableSet for bytes32 ID sets
  • Create mappings from ID to operation data
  • Introduce custom not-found error types
contracts/governance/TimelockControllerEnumerable.sol
Override schedule and scheduleBatch to record operations
  • Call super.schedule/scheduleBatch
  • Compute operation or batch hash ID
  • Add ID to the respective enumerable set
  • Store struct data in mapping
contracts/governance/TimelockControllerEnumerable.sol
Override cancel to clean up tracked operations
  • Call super.cancel
  • Remove ID from operation and batch sets if present
  • Delete corresponding mapping entries
contracts/governance/TimelockControllerEnumerable.sol
Expose enumeration and retrieval APIs
  • Implement operations(), operationsBatch(), operationsCount(), operationsBatchCount()
  • Implement operation(uint256), operation(bytes32), operationBatch(uint256), operationBatch(bytes32)
  • Revert with custom errors for invalid indices or IDs
contracts/governance/TimelockControllerEnumerable.sol
Create unit tests for enumerable timelock behavior
  • Test scheduling, counting, and retrieving single operations
  • Test scheduling, counting, and retrieving batched operations
  • Test execution transitions from pending to executed
  • Test cancellation and not-found error conditions
test/governance/TimelockControllerEnumerable.t.sol

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey there - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (9)
contracts/governance/TimelockControllerEnumerable.sol (7)

11-29: Expose IDs (and optionally timestamps) in returned structs or via companion views.

Without returning the operation id, clients must recompute it from fields to query status; also the scheduled timestamp is not exposed. Consider adding lightweight views to return ids (and optionally scheduledAt via getTimestamp(id)).

Proposed non-breaking additions:

+    /// @dev Return operation id at index
+    function operationIdAt(uint256 index) public view returns (bytes32) {
+        if (index >= _operationsIdSet.length()) revert OperationIndexNotFound(index);
+        return _operationsIdSet.at(index);
+    }
+
+    /// @dev Return operation batch id at index
+    function operationBatchIdAt(uint256 index) public view returns (bytes32) {
+        if (index >= _operationsBatchIdSet.length()) revert OperationBatchIndexNotFound(index);
+        return _operationsBatchIdSet.at(index);
+    }
+
+    /// @dev Optional: getTimestamp passthrough for convenience
+    function operationTimestamp(bytes32 id) public view returns (uint256) {
+        return getTimestamp(id);
+    }

50-56: Rename constructor param to match OZ (admin), update NatSpec.

TimelockController’s last constructor arg is commonly referred to as admin. Rename to avoid confusion.

-        address canceller
-    ) TimelockController(minDelay, proposers, executors, canceller) {}
+        address admin
+    ) TimelockController(minDelay, proposers, executors, admin) {}

57-78: Minor docs phrasing.

“Store the operation the mapping and set” → “in the mapping and set”.

-    /// @dev Store the operation the mapping and set
+    /// @dev Store the operation in the mapping and set

80-101: Minor docs phrasing.

“Store the operationBatch the mapping and set” → “in the mapping and set”.

-    /// @dev Store the operationBatch the mapping and set
+    /// @dev Store the operation batch in the mapping and set

117-126: Add pagination or ID-only views to avoid heavy returns.

Returning full bytes payloads for all ops can hit RPC return limits and be slow. Offer paginated or ID-only variants.

Example:

function operationIds(uint256 offset, uint256 limit) public view returns (bytes32[] memory ids) {
    uint256 n = _operationsIdSet.length();
    if (offset > n) return new bytes32[](0);
    uint256 end = offset + limit > n ? n : offset + limit;
    ids = new bytes32[](end - offset);
    for (uint256 i = offset; i < end; i++) ids[i - offset] = _operationsIdSet.at(i);
}

157-166: Same pagination concern for batches.

Mirror pagination/ID-only accessors for batches to keep calls lightweight.


135-155: Consider convenience views that include status.

Many consumers will want pending-only. Add pendingOperationIds(offset,limit) that filters by isOperationPending(id) or expose status enum in a compact view.

Would you prefer:

  • Track only pending (auto-prune on execute/cancel), or
  • Track all-time and expose status?
    I can implement either.

Also applies to: 175-195

test/governance/TimelockControllerEnumerable.t.sol (2)

61-81: Assert enumeration semantics post-execution (clarify intended behavior).

If you adopt pruning-on-execute, assert operationsCount() == 0. If you keep history, assert operationsCount() == 1 and isOperationPending(id) == false.

Example (prune case):

         timelockControllerEnumerable.execute(
             operation.target,
             operation.value,
             operation.data,
             operation.predecessor,
             operation.salt
         );
         assertEq(timelockControllerEnumerable.isOperationPending(id), false);
+        assertEq(timelockControllerEnumerable.operationsCount(), 0);

111-133: Mirror the post-execution enumeration assertion for batch.

Same note as single execute: decide prune vs. keep-history and assert accordingly.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2d607bd and a0144bf.

📒 Files selected for processing (2)
  • contracts/governance/TimelockControllerEnumerable.sol (1 hunks)
  • test/governance/TimelockControllerEnumerable.t.sol (1 hunks)
🔇 Additional comments (4)
contracts/governance/TimelockControllerEnumerable.sol (1)

7-10: Good extension approach and clean OZ integration.

Using EnumerableSet with IDs tied to OZ hashOperation/hashOperationBatch keeps the surface area minimal while adding the needed visibility.

test/governance/TimelockControllerEnumerable.t.sol (3)

28-59: Solid coverage of schedule path and field assertions.

Good checks for all struct fields and id-based lookup.


83-109: Batch schedule assertions look good.

Fields, id lookup, and counts are validated correctly.


135-176: Good cancel-path tests with revert selectors.

Nice use of explicit selectors; covers both id and index paths.

@aviggiano aviggiano changed the title Fix #213 Add TimelockControllerEnumerable Sep 4, 2025
@ernestognw
Copy link
Member

ernestognw commented Sep 9, 2025

Hey @aviggiano, thanks for the PR! Would you mind adding a README.adoc file in /contracts/community/contracts/governance/README.adoc? It would automatically render in the docs API. I was trying to push the following but I don't have permissions on your branch:

= Governance

[.readme-notice]
NOTE: This document is better viewed at https://docs.openzeppelin.com/community-contracts/api/governance

  * {TimelockControllerEnumerable}: Extension of xref:contracts::governance.adoc[TimelockController] to allow for enumerability of operations.

== Timelock

{{TimelockControllerEnumerable}}

After that, please verify that the NatSpec renders correctly. So far the docs engine doesn't render @notice, @param and @return tags and the @inheritdoc clashes with the @dev tag in other functions. Note that private functions/variables don't require natspec

Aside from that this looks good to me for the community version.

@aviggiano
Copy link
Author

@ernestognw thanks for the review

I updated the documentation as requested

@ernestognw
Copy link
Member

btw you can review the docs preview here: https://deploy-preview-214--community-contracts.netlify.app/community-contracts/0.0.1/api/governance 😄

aviggiano and others added 15 commits September 29, 2025 15:13
@aviggiano
Copy link
Author

Sorry @ernestognw I didn't see your comments

Updated everything as requested.

@aviggiano aviggiano requested a review from ernestognw October 7, 2025 14:59
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.

Base repository TimelockController does not expose operations, relying on centralized indexer
2 participants