Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
a5d2c8c
Fix ArchivedStateConsistency invariant for live restore checks
sisuresh Feb 11, 2026
5f06a62
Add and use markRestoredFromLiveBucketList
sisuresh Feb 11, 2026
e2c315d
Remove unnecessary copies and have ltxs track their own restores.
sisuresh Feb 11, 2026
7ef9fb1
Clean up pre-v23 restore meta logic
sisuresh Feb 11, 2026
d0901ed
Add comments and assert
sisuresh Feb 18, 2026
6a1875e
Add tests for markRestoredFromLiveBucketList
sisuresh Feb 25, 2026
8fca373
Improve binary search for apply-load.
dmkozh Jan 12, 2026
5cf6a2d
Refactored ParallelTxReturnVal
SirTyson Jan 23, 2026
95d429f
Bump p26 env
sisuresh Feb 27, 2026
f52b699
Add RFC 5531 Record Marking Standard references to XDRStream
leighmcculloch Feb 12, 2026
7458f56
Upgrade to C++20
drebelsky Jan 21, 2026
e49420e
Fix msvc build on C++20
graydon Feb 27, 2026
644fd9c
Residual DR 2237 violation
graydon Feb 27, 2026
649c7c8
Remove maintenance
drebelsky Feb 12, 2026
65b9c69
Get the handle to the session once
drebelsky Feb 25, 2026
3af39f8
Address review feedback
drebelsky Feb 25, 2026
2f95071
Address copilot feedback
drebelsky Feb 25, 2026
0aa8536
Use prepared statements for binding queries
drebelsky Feb 25, 2026
17b2f3e
Fix non-postgres build
drebelsky Feb 25, 2026
bacf576
Implement copilot suggestions
drebelsky Feb 27, 2026
dd3a98e
use secrets.SUBMODULE_TOKEN in build-private.yml
graydon Feb 13, 2026
c718e09
Update .github/workflows/build-private.yml
graydon Feb 27, 2026
e454c0e
VS project fix
dmkozh Feb 14, 2026
7364f8d
Enhance parallel tx set building benchmark with 3 new scenarios
dmkozh Feb 13, 2026
cf63e71
Add global conflict mask to Stage for fast-path getConflictingClusters
dmkozh Feb 13, 2026
a461313
Replace O(C) cluster scan with O(K) tx-to-cluster lookup
dmkozh Feb 14, 2026
1686ff1
In-place mClusters mutation with rollback
dmkozh Feb 14, 2026
1403014
Fix by-value captures
dmkozh Feb 14, 2026
181d2bc
Replace hash-map conflict detection with sort-based approach
dmkozh Feb 13, 2026
156ee18
Replace SurgePricingPriorityQueue with pre-sorted vector.
dmkozh Feb 13, 2026
3b21a04
Misc optimizations:
dmkozh Feb 17, 2026
3eb1074
Remove unused mBinPacking.
dmkozh Feb 23, 2026
aefbf41
Add INFO log messages tracking validator timeouts
bboston7 Feb 23, 2026
b5b58bb
Rewrite copilot-instructions, add some skills.
graydon Jan 24, 2026
0b7bd41
Implement CAP-77 - ability to freeze ledger keys via network configur…
dmkozh Feb 14, 2026
057fbc3
Update testnet settings with SLP-5
dmkozh Feb 23, 2026
c9aa3b2
History test fixes
marta-lokhova Mar 9, 2026
e00a75c
Minor updates to fee tracking logic in tx sets.
dmkozh Mar 10, 2026
2c30879
Log state rebuild timings on startup
marta-lokhova Mar 12, 2026
abea3c7
Bump xdr and env
sisuresh Mar 11, 2026
86fb278
Remove p26 ifdefs
sisuresh Mar 11, 2026
40028d8
Generate curr test tx meta
sisuresh Mar 12, 2026
e8bfddb
Generate next test tx meta
sisuresh Mar 12, 2026
e94d32d
Generate test lcm for vnext
sisuresh Mar 12, 2026
1402e3b
Run "git submodule sync" during autogen.sh
graydon Mar 11, 2026
8ce64e8
Address gaps in concurrency thread safety
marta-lokhova Feb 22, 2026
aa7b503
Add thread-safety-beta for more coverage
marta-lokhova Mar 4, 2026
951d93e
Add sccache and nsc-backed sccache support to build system.
graydon Mar 4, 2026
2fffd1a
Update devcontainer Dockerfile for additional use on namespace devboxes
graydon Mar 7, 2026
cad3d64
Set rust global memory limit to unlimited on startup
graydon Feb 11, 2026
19573da
Improve TxSet validation.
dmkozh Feb 11, 2026
6c15f31
overlay cleanups
marta-lokhova Feb 13, 2026
98bb4b2
Clean up far-future SCP data when tracking
bboston7 Feb 6, 2026
a2fd6b1
Bump soroban-env p25 submodule to internal 25.2.0
graydon Feb 13, 2026
3388ab6
Catch runtime errors in catchup
drebelsky Jan 20, 2026
5187222
Add a config to ban accounts
marta-lokhova Feb 22, 2026
b3a4f9b
Update banned accounts logic
marta-lokhova Feb 22, 2026
829d5ef
Introduce a new module for banned accounts persistence
marta-lokhova Feb 23, 2026
5f4c49f
UnorderedSet --> std::set for more intuitive reporting
marta-lokhova Feb 23, 2026
87ff1b2
make banaccounts persistent
marta-lokhova Feb 23, 2026
e6fb938
Add a database migration for new table, add a schema parity test for …
marta-lokhova Feb 23, 2026
e6ba834
Slightly modify banaccounts API to explicitly use unban, small fixes
marta-lokhova Feb 24, 2026
1e3c430
Small update to startup path, to ensure tests automatically populate …
marta-lokhova Feb 24, 2026
002eaeb
Address PR review comments
marta-lokhova Feb 24, 2026
bcd65e8
Clear hardcoded filtered accounts
marta-lokhova Feb 25, 2026
0e48cbd
Introduce force flag to tx endpoint
marta-lokhova Feb 25, 2026
626353d
Fix rebase fallout
marta-lokhova Mar 18, 2026
e0841ba
Rate limit `GET_SCP_STATE` messages
bboston7 Mar 2, 2026
575f186
Update src/overlay/Peer.h
bboston7 Mar 4, 2026
f5ce0e3
Run soroban on large stacks
graydon Mar 7, 2026
e80f187
Remove no-longer-meaningful &mut selfs from module cache bridge methods
graydon Mar 9, 2026
ce83848
Harden `computePerOpFee` by preventing division by 0.
dmkozh Mar 9, 2026
4d0ac34
Add test demonstrating rate limit behavior
bboston7 Mar 10, 2026
bb17e94
Update .gitmodules
marta-lokhova Mar 18, 2026
4470ec9
Merge v25.2.2 into master (#5191)
sisuresh Mar 21, 2026
77ffd7a
Fix stale Soroban host rebuild invalidation. (#5187)
dmkozh Mar 21, 2026
d6792a7
Bump overlay version for p26 (#5193)
marta-lokhova Mar 21, 2026
6e64ded
Bump p26 env to 26.0.0
sisuresh Mar 24, 2026
4074782
Minor test fix
marta-lokhova Mar 30, 2026
471c5dd
Add a randomized test for 'frozen' DEX offers.
dmkozh Mar 11, 2026
c52c156
Add secret resolution using a files for NODE_SEED config value
sisuresh Mar 13, 2026
023d5de
Windows build updates
dmkozh Mar 30, 2026
25885e0
Misc apply load improvements:
dmkozh Mar 30, 2026
4dea41a
Add option to generate LCM from tests
sisuresh Feb 14, 2026
366838a
Add a custom token transfer benchmark mode for apply load.
dmkozh Apr 1, 2026
ade6b37
Tweak upgrades
marta-lokhova Apr 1, 2026
7299ce2
Remove C-style casts
drebelsky Mar 18, 2026
c69ae0e
Add logging for future
sisuresh Apr 3, 2026
9edc0a4
Zero non-deterministic diagnostic timing events in LCM output
sisuresh Apr 2, 2026
ab32c70
Don't write file if normalization produces no diff
sisuresh Apr 2, 2026
cad9062
use shorter file names
sisuresh Apr 3, 2026
24b167b
Regenerate with shorter files name
sisuresh Apr 2, 2026
5a01b24
Address review comment
sisuresh Apr 3, 2026
73c3249
Update docs
sisuresh Apr 6, 2026
5ea9816
Generate classic transactions in every apply load mode.
dmkozh Apr 2, 2026
dbb58a3
Ignore tracy binaries
drebelsky Feb 2, 2026
6b7f409
Add check for SecretKey::random in tests
drebelsky Feb 2, 2026
063b2c6
Remove extraneous `#pragma once`
drebelsky Feb 2, 2026
0966791
Only test Soroban if Catch2 tests pass
drebelsky Feb 10, 2026
8720941
Remove obsolete docs
drebelsky Feb 19, 2026
7c050e2
Remove impossible condition
drebelsky Feb 2, 2026
829a96a
Initialize uninitialized variable
drebelsky Feb 23, 2026
d92bf94
Add clang format rule for right alignment
drebelsky Feb 23, 2026
c2374f3
Implement review suggestions
drebelsky Feb 25, 2026
6b74a82
Format new code
drebelsky Apr 7, 2026
6bc376f
Remove LedgerHeader from BucketListSnapshotData
SirTyson Feb 9, 2026
c9e6c94
Consolidated state access to LedgerStateSnapshot
SirTyson Feb 11, 2026
4a1efd8
Make LedgerStateSnapshot threadsafe
SirTyson Feb 11, 2026
38c0a45
Remove BucketSnapshotManager and manage snapshot from LedgerManager
SirTyson Feb 14, 2026
5ce6ec6
Fix minor race condition in invariant check
SirTyson Feb 17, 2026
f304bbc
Small fixes
SirTyson Feb 23, 2026
2fa895d
Fix build issue with SharedMutex
SirTyson Apr 8, 2026
91f9396
Add Soroswap benchmark mode for apply load.
dmkozh Apr 2, 2026
a6bd195
More updates to VS Rust build, change detection is tricky on Windows.
dmkozh Apr 6, 2026
60d6470
Add a script to run a of apply load scenarios for a given build.
dmkozh Apr 8, 2026
0a56869
Fix race on bucket random evicion cache
SirTyson Mar 19, 2026
9dfd91b
remove unused ChangeLog
wpalmeri Apr 8, 2026
d0573d8
update automake
wpalmeri Apr 8, 2026
b8e4a10
Add randomized testing for snapshot concurrency
SirTyson Mar 19, 2026
e1615be
Removed mutable LedgerHeader from BucketSnapshotState
SirTyson Apr 8, 2026
f385597
Remove BucketSnapshotState and clean up interface
SirTyson Apr 9, 2026
6dbfbec
Rename LedgerSnapshot to LedgerReadView
SirTyson Apr 9, 2026
6258558
Clean up history publish
SirTyson Apr 9, 2026
bb7e0d6
Move historical ledger management to query server
SirTyson Apr 10, 2026
3cc6f16
Added comprehensive historical query tests
SirTyson Apr 10, 2026
3c1ab70
Add thread invariant to LedgerStateSnapshot
SirTyson Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
QualifierAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
Expand Down
64 changes: 64 additions & 0 deletions .claude/skills/adding-a-new-skill/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
name: adding-a-skill
description: extending yourself with a new reusable skill by interviewing the user
---

If the user wants to add a new skill, you can help them with this:

1. Ask the user for a short name and description of the skill. The name should be
something that can be rendered as a short (10-30 character) descriptive sequence
of words separated by hyphens. The description should be a line of text that is
focused on conveying to a future agent when the skill would be appropriate to
use and roughly what it does.

2. Ask the user for details. You can build up an idea of what the skill should do
over multiple rounds of questioning. You want to find out:

- If the skill should involve any key thoughts or considerations.
- If the skill has an order of steps, or is an unordered set of tasks.
- If the skill involves running sub-agents and if so how many.
- **If the skill involves a lot of work** that might benefit from splitting
into subagent tasks (see below for considerations).
- If the skill should include commands to run.
- If the skill should include code to write.
- If for code or commands to there is specific text or more of a
sketch or template of text _like_ some example to include.
- Any hard rules that an agent doing the skill should ALWAYS or NEVER do.
- A set of conditions for stopping, looping/extending, or resetting/restarting.
- How the result of applying the skill should be conveyed to the user.

**Subagent considerations**

Skills that involve a lot of work may benefit from splitting into pieces and
running each piece as a subagent. This keeps each subagent focused on a
moderate amount of work so it doesn't get lost or wander off track. If the
skill might use subagents, identify:

- How the work could be split into moderate-sized pieces
- What information each subagent needs to do its piece
- The skill file should have an "Inputs" section listing what's needed
- The skill should suggest a format for the subagent prompt

3. Once you have learned this information from the user, assemble it into a
file in the repository. Add a file named `.claude/skills/<skill-name>/SKILL.md`
with the following structure:

- YAML frontmatter with the fields `name` and `description` drawn from
the name and description.
- An introductory paragraph or two describing the goal of the skill and
any thoughts or special considerations to perform, as well as any
description of the meta-parameters like how to split work among subagents
and how to stop/loop/restart. If the skill involves a lot of work,
suggest how it might be split into moderate-sized subagent tasks.
- **If the skill might use subagents**: An "Inputs" section that lists
what information is needed for each piece, and suggests a format for the
subagent prompt. This section comes right after the overview.
- Either a sequential list of steps or an unordered list of tasks.
- Any code or commands in either specific or example form.
- Any of the ALWAYS/NEVER conditions.
- A "Completion" section describing how to summarize the work, noting that
if invoked as a subagent, the summary should be passed back to the
invoking agent.

When you're done, save that file and then present the user with a link to it
so they can open it and review it.
215 changes: 215 additions & 0 deletions .claude/skills/adding-tests/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
---
name: adding-tests
description: analyzing a change to determine what tests are needed and adding them to the test suite
---

# Overview

This skill is for analyzing a code change and adding appropriate test coverage.
It covers both unit tests and randomized/fuzz tests, ensuring that new
functionality is tested and bug fixes include regression tests.

This skill involves a fair amount of work. Consider splitting it into pieces and
running each piece as a subagent (e.g., one for analyzing test needs, one for
writing unit tests, one for randomized tests). Keep each subagent focused on a
moderate amount of work so it doesn't get lost or wander off track.

The output is either confirmation that tests were added (with details), or
confirmation that no additional tests are needed.

# Inputs

Before starting the analysis, gather the following information (if running as a
subagent, the invoking agent should provide these; otherwise, determine them
yourself or ask the user):

1. **Git range**: The git command to get the diff (e.g., `git diff master...HEAD`).

2. **Type of change**: Is this a new feature, bug fix, refactor, or performance
change?

3. **Bug/issue reference** (if applicable): For bug fixes, the issue number or
description of what was broken.

4. **Specific test requirements** (optional): Any specific testing requirements
the user has mentioned.

If invoking as a subagent, the prompt should include: "Analyze and add tests
for: <change type>. Get the diff using `<git-command>`. <issue reference if
applicable> <specific requirements>"

# Analyzing Test Needs

## Step 1: Understand the Change

Get the diff using the command provided by the invoking agent:

Categorize the change:
- **New feature**: Adding new functionality
- **Bug fix**: Correcting incorrect behavior
- **Refactor**: Changing implementation without changing behavior
- **Performance**: Optimizing existing code

## Step 2: Find Existing Tests

Locate tests related to the changed code:

1. Look for test files with similar names (e.g., `Foo.cpp` → `FooTests.cpp`)
2. Search for tests that reference the modified functions/classes
3. Check if there are integration tests that exercise this code path

```bash
# Find test files
find src -name "*Tests.cpp" | xargs grep -l "FunctionName"
```

## Step 3: Determine What Tests Are Needed

### For New Features

- Unit tests for each new public function/method
- Tests for expected behavior with valid inputs
- Tests for edge cases (empty input, max values, etc.)
- Tests for error handling with invalid inputs
- Integration tests if the feature involves multiple components

### For Bug Fixes

- A regression test that would have failed before the fix
- The test should exercise the exact condition that caused the bug
- Include a comment referencing the issue/bug number if available

### For Refactors

- Existing tests should still pass (no new tests typically needed)
- If existing test coverage is inadequate, add tests before refactoring

### For Performance Changes

- Ensure functional tests still pass
- Consider adding benchmark tests if appropriate
- Consider adding metrics or tracy ZoneScoped annotations to help
quantify performance
- Consider adding a `LogSlowExecution` wrapper that will flag any
long-running units of work on the IO service

### Some Special Cases

- Write fee bump tests to go along with any new regular transaction tests or any
logic changes to transaction processing and application.

## Step 4: Check for Randomized Test Needs

For changes affecting:
- Transaction processing
- Consensus/SCP
- Ledger state management
- Serialization/deserialization
- Any protocol-critical code

Consider whether randomized testing is appropriate:
- Fuzz targets for parsing/deserialization
- Property-based tests for invariants
- Simulation tests for distributed behavior

# Writing Tests

## Unit Test Patterns

Find existing tests in the same area and follow their patterns. Common patterns
in this codebase:

1. **Test fixture setup**: Look for how test fixtures are created
2. **Assertion style**: Match the assertion macros used elsewhere
3. **Test naming**: Follow the naming convention of nearby tests
4. **Helper functions**: Reuse existing test helpers rather than creating new ones
5. **Test Strictness**: Ensure tests are strict and fail on any unexpected behavior,
check:
- [ ] Do my tests have timeouts? (no infinite hangs)
- [ ] Do my tests assert on failure? (no silent failures or early returns)
- [ ] Am I using logging where I should use assert/panic?

## Test File Organization

- Tests typically live in `src/` alongside the code they test, in a `test/`
subdirectory.
- Test files are usually named `*Tests.cpp`
- There are often "test utility" helper files named `*TestUtils.cpp`
- Tests are organized into test suites by component
- There are also some general testing utility files in `src/test`
- The unit test framework is "Catch2", a common C++ framework.

## Adding a Unit Test

1. Find the appropriate test file (or create one following conventions)
2. Add the test case following existing patterns
3. Ensure the test is self-contained and doesn't depend on external state
4. Run the new test in isolation to verify it works

## Adding a Fuzz Target

If adding a fuzz target:

1. Check existing fuzz targets in the codebase for patterns
2. Create a target that exercises the specific code path
3. Ensure the target can handle arbitrary input without crashing (except for
intentional assertion failures)
4. Document what the fuzz target is testing

# Output Format

Report what was done:

```
## Tests Added

### Unit Tests

1. **src/ledger/LedgerManagerTests.cpp**: `processEmptyTransaction`
- Tests that empty transactions are rejected with appropriate error
- Regression test for issue #1234

2. **src/ledger/LedgerManagerTests.cpp**: `processTransactionWithMaxOps`
- Tests boundary condition at maximum operation count

### Randomized Tests

1. **src/fuzz/FuzzTransactionFrame.cpp**: Extended to cover new transaction type
- Added generation of the new transaction variant

## No Additional Tests Needed

[If applicable, explain why existing coverage is sufficient]
```

# ALWAYS

- ALWAYS find and follow existing test patterns in the same area
- ALWAYS include regression tests for bug fixes
- ALWAYS test both success and failure paths
- ALWAYS test edge cases and boundary conditions
- ALWAYS run new tests to verify they pass
- ALWAYS run new tests with the bug still present (if a regression test) to verify they would have caught it
- ALWAYS reuse existing test helpers and fixtures
- ALWAYS keep tests focused and independent

# NEVER

- NEVER add tests that depend on external state or ordering
- NEVER add tests that are flaky or timing-dependent
- NEVER duplicate existing test coverage
- NEVER write tests that test implementation details rather than behavior
- NEVER add tests without running them
- NEVER skip randomized test consideration for protocol-critical code
- NEVER create new test helpers when suitable ones exist

# Completion

Summarize your work as follows:

1. Summary of tests added (count and type)
2. Details of each test added
3. Confirmation that new tests pass
4. Any notes about test coverage that might still be lacking

If invoked as a subagent, pass this summary back to the invoking agent.
70 changes: 70 additions & 0 deletions .claude/skills/configuring-the-build/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
name: configuring-the-build
description: modifying build configuration to enable/disable variants, switch compilers or flags, or otherwise prepare for a build
---

# Overview

The build works like this:
- We start by running `./autogen.sh`
- `autogen.sh` runs `autoconf` to turn `configure.ac` into `configure`
- `autogen.sh` also runs `automake` to turn `Makefile.am` into `Makefile.in` and `src/Makefile.am` into `src/Makefile.in`
- We then run `./configure`
- `configure` turns `Makefile.in` into `Makefile` and `src/Makefile.in` into `src/Makefile`
- `configure` also turns `config.h.in` into `config.h` that contains some variables
- `configure` also writes `config.log`, if there are errors they will be there

- ALWAYS run `./autogen.sh` and `./configure` from top-level, never a subdirectory
- ALWAYS configure with `--enable-ccache` for caching
- ALWAYS configure with `--enable-sdfprefs` to inhibit noisy build output
- NEVER edit `configure` directly, only ever edit `configure.ac`
- NEVER edit `Makefile` or `Makefile.in` directly, only ever edit `Makefile.am`

To change configuration settings, re-run `./configure` with new flags.

You can see the existing configuration flags by looking at the head of `config.log`

## Configuration variables

To change compiler from clang to gcc, switch the value you pass for CC and CXX.
For example run `CXX=g++ CC=gcc ./configure ...` to configure with gcc. We want
builds to always work with gcc _and_ clang.

To alter compile flags (say turn on or off optimization, or debuginfo) change
CXXFLAGS. For example run `CXXFLAGS='-O0 -g' ./configure ...` to build
non-optimized and with debuginfo. Normally you should not have to change these.

Sometimes you will need to change to a different implementation of the C++
standard library. To do this, pass `-stdlib=libc++` or `-stdlib=libstdc++`
in `CXXFLAGS` explicitly. But again, normally you don't need to do this.

## Configuration flags

Here are some common configuration flags you might want to change:

- `--disable-tests` turns off `BUILD_TESTS`, which excludes unit tests and all
test-support infrastructure from core. We want this build variant to work
since it is the one we ship, but it is uncommon when doing development.

- `--disable-postgres` turns off postgresql backend support in core, leaving
only sqlite. tests will run faster, and also this is a configuration we want
to work (we will remove postgres entirely someday).

There are also some flags that turn on compile-time instrumentation for
different sorts of testing. Turn these on if doing specific diagnostic tests,
and/or to check for "anything breaking by accident". If you turn any on, you
will need to do a clean build -- the object files will have the wrong content.

- `--enable-asan` turns on address sanitizer.
- `--enable-threadsanitizer` same, but for thread sanitizer.
- `--enable-memcheck` same, but for memcheck.
- `--enable-undefinedcheck` same, but for undefined-behaviour sanitizer.
- `--enable-extrachecks` turns on C++ stdlib debugging, slows things down.
- `--enable-fuzz` builds core with fuzz instrumentation, plus fuzz targets.

There is more you can learn by reading `configure.ac` directly but the
instructions above ought to suffice for 99% of tasks. Try not to do anything
too strange with the configuration.

When in doubt, or if things get stuck, you can always re-run `./autogen.sh`
and `./configure`.
Loading