Skip to content

fix(revert): match Dolt 2.0.5 dirty-set rules (PR dolt#11073 + follow-up)#992

Merged
timsehn merged 2 commits into
masterfrom
fix/revert-match-dolt-2.0.5
May 20, 2026
Merged

fix(revert): match Dolt 2.0.5 dirty-set rules (PR dolt#11073 + follow-up)#992
timsehn merged 2 commits into
masterfrom
fix/revert-match-dolt-2.0.5

Conversation

@timsehn
Copy link
Copy Markdown
Collaborator

@timsehn timsehn commented May 20, 2026

Summary

Match the Dolt 2.0.5 revert semantics so the version-control oracle tests pass against the current Dolt release.

Two rules, mirroring git revert exactly:

  1. Any staged change refuses the revert — even when the staged table is unrelated to the revert target. (Git's "index must be clean" requirement.)
  2. Unstaged changes refuse only if they touch a table the revert would also touch — disjoint unstaged changes are allowed and get folded into the revert commit.

What was wrong

Before this PR, doltlite refused only when a dirty change overlapped with a table the revert would touch. That matched Dolt's behavior up through 2.0.4 but diverged from 2.0.5, which added the stricter index-clean rule on top.

Caught by vc_oracle_revert_test.sh's revert_head_staged_unrelated_table_committed case once CI upgraded to Dolt 2.0.5.

What changed

Replaced three internal helpers (doltliteRevertHasDirtyTouchedTables, doltliteCollectRevertTouchedTables, plus the name-list utility helpers) with a single doltliteRevertCheckDirty that does both checks inline:

  • If session-staged catalog hash != session-head hash, flag dirty regardless of which tables differ.
  • Else walk every table that differs between working and head; if the revert target catalog and parent catalog also differ on that same table, flag dirty.

Error message updated to match Dolt's exact wording:

Your local changes would be overwritten by revert.
hint: Please commit your changes before you revert.

Net diff: -131 lines, +58 lines (simpler, single helper).

References

  • Dolt PR dolthub/dolt#11073 — "dolt revert to more closely match git"
  • Dolt commit 014f1d8 — "align revert dirty-set rules with git" (the follow-up that added the index-clean rule)
  • Both are in Dolt v2.0.5.

Test plan

Verified locally against /tmp/dolt-2.0.5 (the binary downloaded from the v2.0.5 release):

  • vc_oracle_revert_test.sh — 6/6 pass (was 5/6 with revert_head_staged_unrelated_table_committed failing before this change)
  • vc_oracle_revert_cherrypick_test.sh — 45/45 pass
  • doltlite_merge.sh — 91/91 pass
  • doltlite_conflicts.sh — 40/40 pass
  • doltlite_advanced.sh — 140/140 pass

🤖 Generated with Claude Code

…-up)

Dolt 2.0.5 tightened dolt_revert's dirty-set check to match git's
behavior:

  1. Any staged change refuses the revert, even when the staged
     table is unrelated to the revert target. Mirrors git's
     "index must be clean" requirement — otherwise the revert
     commit would mix staged work with the inverse-change commit.
  2. Unstaged changes refuse the revert only if they overlap with
     a table the revert would touch. Disjoint unstaged changes
     are allowed and get folded into the revert commit.

Previous doltlite behavior was "refuse only if dirty change touches
a table the revert would also touch", which allowed staged-disjoint
to proceed. That diverged from Dolt 2.0.5 on
revert_head_staged_unrelated_table_committed (caught by
vc_oracle_revert_test.sh once Dolt was upgraded to 2.0.5).

Replace doltliteRevertHasDirtyTouchedTables /
doltliteCollectRevertTouchedTables / their internal name-list helpers
with a single doltliteRevertCheckDirty that does both checks inline:

  * If session-staged catalog hash differs from session-head hash,
    flag dirty regardless of which tables differ.
  * Else compare working catalog to head; for each differing table,
    check whether the revert target catalog and parent catalog
    differ on that same table — if so, flag dirty.

Error message also updated to match Dolt's:
  "Your local changes would be overwritten by revert.\nhint: ..."

Verified against /tmp/dolt-2.0.5 binary downloaded from the v2.0.5
release:
  * vc_oracle_revert_test.sh: 6/6 pass (was 5/6 with the staged-disjoint
    case failing before this change)
  * vc_oracle_revert_cherrypick_test.sh: 45/45 pass
  * doltlite_merge.sh: 91/91 pass
  * doltlite_conflicts.sh: 40/40 pass
  * doltlite_advanced.sh: 140/140 pass

References: Dolt PR dolthub/dolt#11073 ("dolt revert to more closely
match git") and follow-up commit 014f1d8 ("align revert dirty-set
rules with git") in dolthub/dolt v2.0.5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 20, 2026

Sysbench-Style Benchmark: Doltlite vs SQLite

In-Memory

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 21,127 27,682 1.31
oltp_range_select 8,452 12,819 1.52
oltp_sum_range 7,670 11,652 1.52
oltp_order_range 2,310 3,014 1.30
oltp_distinct_range 3,331 4,169 1.25
oltp_index_scan 3,303 5,072 1.54
select_random_points 10,007 14,119 1.41
select_random_ranges 3,929 5,028 1.28
covering_index_scan 7,437 9,840 1.32
groupby_scan 27,329 32,750 1.20
index_join 3,984 5,749 1.44
index_join_scan 1,860 2,980 1.60
types_table_scan 10,721 12,749 1.19
table_scan 115,738 131,126 1.13
oltp_read_only 93,991 121,576 1.29
Average 1.35

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 17,911 26,043 1.45
oltp_insert 13,643 19,607 1.44
oltp_update_index 33,011 50,777 1.54
oltp_update_non_index 23,448 35,327 1.51
oltp_delete_insert 31,504 41,748 1.33
oltp_write_only 13,185 20,950 1.59
types_delete_insert 16,258 20,498 1.26
oltp_read_write 52,440 82,867 1.58
Average 1.46

File-Backed

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 88,846 37,540 0.42
oltp_range_select 15,723 15,428 0.98
oltp_sum_range 14,795 14,277 0.96
oltp_order_range 3,171 4,467 1.41
oltp_distinct_range 4,092 5,612 1.37
oltp_index_scan 10,413 8,141 0.78
select_random_points 17,724 16,931 0.96
select_random_ranges 10,988 7,676 0.70
covering_index_scan 14,541 10,969 0.75
groupby_scan 28,214 34,534 1.22
index_join 7,738 8,008 1.03
index_join_scan 2,757 3,620 1.31
types_table_scan 11,419 12,849 1.13
table_scan 116,683 133,552 1.14
oltp_read_only 192,124 134,893 0.70
Average 0.99

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 20,979 29,349 1.40
oltp_insert 16,013 22,133 1.38
oltp_update_index 37,027 56,508 1.53
oltp_update_non_index 26,703 39,914 1.49
oltp_delete_insert 33,406 47,727 1.43
oltp_write_only 16,924 26,205 1.55
types_delete_insert 17,093 20,949 1.23
oltp_read_write 55,807 88,925 1.59
Average 1.45

File-Backed (autocommit)

Each statement runs as its own transaction — exposes per-commit
fixed costs that the wrapped-in-BEGIN/COMMIT tests amortize away.
SQLite uses WAL mode with synchronous=FULL in this section so
the comparison uses SQLite's durable WAL autocommit path.

Reads

Reads have no commit cost; these are the same SQL files as the
File-Backed Reads section, included here for symmetry and to
catch any per-statement overhead doltlite pays on the read path.

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 43,019 37,520 0.87
oltp_range_select 10,853 15,390 1.42
oltp_sum_range 10,028 14,301 1.43
oltp_order_range 2,598 4,465 1.72
oltp_distinct_range 3,613 5,618 1.55
oltp_index_scan 5,595 8,123 1.45
select_random_points 12,510 17,025 1.36
select_random_ranges 6,312 7,683 1.22
covering_index_scan 9,844 10,983 1.12
groupby_scan 27,557 34,605 1.26
index_join 5,221 8,022 1.54
index_join_scan 2,174 3,621 1.67
types_table_scan 10,908 12,784 1.17
table_scan 116,344 133,935 1.15
oltp_read_only 126,172 135,510 1.07
Average 1.33

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert_ac 73,060 78,096 1.07
oltp_insert_ac 74,761 102,925 1.38
oltp_update_index_ac 77,209 116,765 1.51
oltp_update_non_index_ac 70,860 94,185 1.33
oltp_delete_insert_ac 75,530 109,179 1.45
oltp_write_only_ac 77,093 106,938 1.39
types_delete_insert_ac 71,763 85,469 1.19
oltp_read_write_ac 81,240 109,757 1.35
Average 1.33

10000 rows, median of 21 invocations per test, workload-only timing via host monotonic clock when available.

Performance Ceiling Check (1.8x individual, 1.5x average)

All tests within ceilings.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 20, 2026

Sysbench-Style Benchmark (TEXT PK): Doltlite vs SQLite

Companion to the classic Sysbench-Style Benchmark. Every workload here
runs against tables with a 32-char hex TEXT PRIMARY KEY (UUID-shaped).

Individual ratios gated at 1.8×; section averages gated at 1.5×.

In-Memory

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 23,353 29,139 1.25
oltp_range_select 9,844 13,661 1.39
oltp_sum_range 8,497 13,325 1.57
oltp_order_range 2,485 3,049 1.23
oltp_distinct_range 3,538 4,199 1.19
oltp_index_scan 3,196 4,257 1.33
select_random_points 11,328 14,354 1.27
select_random_ranges 4,097 4,985 1.22
covering_index_scan 7,289 9,205 1.26
groupby_scan 23,407 28,105 1.20
index_join 4,337 6,270 1.45
index_join_scan 1,658 2,653 1.60
types_table_scan 11,004 12,831 1.17
table_scan 8,376 10,589 1.26
oltp_read_only 100,797 128,130 1.27
Average 1.31

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 2,275 3,400 1.49
oltp_insert 16,208 25,157 1.55
oltp_update_index 38,722 50,600 1.31
oltp_update_non_index 28,703 33,484 1.17
oltp_delete_insert 28,532 42,612 1.49
oltp_write_only 13,066 19,119 1.46
types_delete_insert 15,655 18,512 1.18
oltp_read_write 54,737 79,299 1.45
Average 1.39

File-Backed

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 105,242 41,166 0.39
oltp_range_select 18,121 15,292 0.84
oltp_sum_range 16,853 14,690 0.87
oltp_order_range 3,350 3,512 1.05
oltp_distinct_range 4,455 4,708 1.06
oltp_index_scan 11,468 5,875 0.51
select_random_points 19,919 16,038 0.81
select_random_ranges 12,468 6,553 0.53
covering_index_scan 15,626 10,507 0.67
groupby_scan 24,520 28,631 1.17
index_join 8,606 7,292 0.85
index_join_scan 2,552 3,220 1.26
types_table_scan 11,934 12,978 1.09
table_scan 9,442 11,024 1.17
oltp_read_only 217,047 144,472 0.67
Average 0.86

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 4,101 4,301 1.05
oltp_insert 18,617 27,694 1.49
oltp_update_index 40,166 51,885 1.29
oltp_update_non_index 29,531 34,219 1.16
oltp_delete_insert 29,614 43,241 1.46
oltp_write_only 14,443 20,106 1.39
types_delete_insert 16,548 19,103 1.15
oltp_read_write 55,678 79,740 1.43
Average 1.30

File-Backed (autocommit)

Each statement runs as its own transaction — exposes per-commit
fixed costs that the wrapped-in-BEGIN/COMMIT tests amortize away.
SQLite uses WAL mode with synchronous=FULL in this section so
the comparison uses SQLite's durable WAL autocommit path.

Reads

Reads have no commit cost; these are the same SQL files as the
File-Backed Reads section, included here for symmetry and to
catch any per-statement overhead doltlite pays on the read path.

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 50,316 40,897 0.81
oltp_range_select 12,825 15,294 1.19
oltp_sum_range 11,312 14,727 1.30
oltp_order_range 2,791 3,584 1.28
oltp_distinct_range 3,839 4,710 1.23
oltp_index_scan 5,982 5,885 0.98
select_random_points 14,344 15,908 1.11
select_random_ranges 6,910 6,494 0.94
covering_index_scan 10,062 10,492 1.04
groupby_scan 23,768 28,416 1.20
index_join 5,653 7,258 1.28
index_join_scan 1,948 3,208 1.65
types_table_scan 11,269 12,970 1.15
table_scan 8,709 10,954 1.26
oltp_read_only 139,259 144,792 1.04
Average 1.16

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert_ac 54,431 65,178 1.20
oltp_insert_ac 55,043 79,736 1.45
oltp_update_index_ac 57,744 93,738 1.62
oltp_update_non_index_ac 52,184 73,202 1.40
oltp_delete_insert_ac 55,550 83,700 1.51
oltp_write_only_ac 54,273 84,225 1.55
types_delete_insert_ac 50,080 68,935 1.38
oltp_read_write_ac 60,566 91,057 1.50
Average 1.45

1000 rows, median of 13 invocations per test, workload-only timing via host monotonic clock when available.

Performance Ceiling Check (1.8x individual, 1.5x average)

All tests within ceilings.

Sysbench-Style Benchmark (BLOB PK): Doltlite vs SQLite

Companion to the classic Sysbench-Style Benchmark. Every workload here
runs against tables with a 16-byte big-endian BLOB PRIMARY KEY.

Individual ratios gated at 1.8×; section averages gated at 1.5×.

In-Memory

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 23,205 28,771 1.24
oltp_range_select 9,842 13,777 1.40
oltp_sum_range 8,440 13,401 1.59
oltp_order_range 2,461 3,076 1.25
oltp_distinct_range 3,530 4,233 1.20
oltp_index_scan 3,231 4,218 1.31
select_random_points 11,191 14,238 1.27
select_random_ranges 4,072 4,988 1.22
covering_index_scan 7,267 9,167 1.26
groupby_scan 23,252 28,162 1.21
index_join 4,370 6,229 1.43
index_join_scan 1,711 2,702 1.58
types_table_scan 11,016 12,798 1.16
table_scan 8,215 10,627 1.29
oltp_read_only 100,592 128,247 1.27
Average 1.31

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 2,323 3,380 1.46
oltp_insert 16,279 24,543 1.51
oltp_update_index 38,704 50,045 1.29
oltp_update_non_index 28,887 33,200 1.15
oltp_delete_insert 28,287 41,586 1.47
oltp_write_only 12,896 18,809 1.46
types_delete_insert 15,615 18,695 1.20
oltp_read_write 54,325 78,830 1.45
Average 1.37

File-Backed

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 104,339 40,770 0.39
oltp_range_select 18,183 15,264 0.84
oltp_sum_range 16,784 14,689 0.88
oltp_order_range 3,352 3,511 1.05
oltp_distinct_range 4,480 4,676 1.04
oltp_index_scan 11,488 5,830 0.51
select_random_points 19,629 15,794 0.80
select_random_ranges 12,407 6,460 0.52
covering_index_scan 15,624 10,528 0.67
groupby_scan 24,155 28,660 1.19
index_join 8,544 7,188 0.84
index_join_scan 2,576 3,186 1.24
types_table_scan 11,872 13,090 1.10
table_scan 9,238 10,880 1.18
oltp_read_only 207,808 143,911 0.69
Average 0.86

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 3,984 4,255 1.07
oltp_insert 18,280 26,935 1.47
oltp_update_index 39,580 50,189 1.27
oltp_update_non_index 29,654 34,398 1.16
oltp_delete_insert 28,864 42,038 1.46
oltp_write_only 13,843 19,611 1.42
types_delete_insert 16,326 19,020 1.17
oltp_read_write 54,983 79,451 1.45
Average 1.31

File-Backed (autocommit)

Each statement runs as its own transaction — exposes per-commit
fixed costs that the wrapped-in-BEGIN/COMMIT tests amortize away.
SQLite uses WAL mode with synchronous=FULL in this section so
the comparison uses SQLite's durable WAL autocommit path.

Reads

Reads have no commit cost; these are the same SQL files as the
File-Backed Reads section, included here for symmetry and to
catch any per-statement overhead doltlite pays on the read path.

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 50,148 40,460 0.81
oltp_range_select 12,611 15,397 1.22
oltp_sum_range 11,235 14,716 1.31
oltp_order_range 2,762 3,495 1.27
oltp_distinct_range 3,840 4,666 1.22
oltp_index_scan 5,950 5,837 0.98
select_random_points 14,003 15,814 1.13
select_random_ranges 6,788 6,447 0.95
covering_index_scan 10,002 10,541 1.05
groupby_scan 23,565 28,299 1.20
index_join 5,741 7,230 1.26
index_join_scan 1,998 3,155 1.58
types_table_scan 11,404 12,997 1.14
table_scan 8,605 10,919 1.27
oltp_read_only 138,525 144,268 1.04
Average 1.16

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert_ac 53,569 63,977 1.19
oltp_insert_ac 54,465 80,352 1.48
oltp_update_index_ac 56,426 92,804 1.64
oltp_update_non_index_ac 52,361 69,786 1.33
oltp_delete_insert_ac 53,708 84,836 1.58
oltp_write_only_ac 53,863 84,013 1.56
types_delete_insert_ac 51,721 67,698 1.31
oltp_read_write_ac 58,528 92,385 1.58
Average 1.46

1000 rows, median of 13 invocations per test, workload-only timing via host monotonic clock when available.

Performance Ceiling Check (1.8x individual, 1.5x average)

All tests within ceilings.

Sysbench-Style Benchmark (composite PK): Doltlite vs SQLite

Companion to the classic Sysbench-Style Benchmark. Every workload here
runs against tables with a 2-column INTEGER PRIMARY KEY(a, b) WITHOUT ROWID.

Individual ratios gated at 1.8×; section averages gated at 1.5×.

In-Memory

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 26,345 32,411 1.23
oltp_range_select 15,942 23,407 1.47
oltp_sum_range 14,772 21,782 1.47
oltp_order_range 3,105 4,112 1.32
oltp_distinct_range 4,161 5,293 1.27
oltp_index_scan 3,355 4,427 1.32
select_random_points 21,094 25,697 1.22
select_random_ranges 5,968 7,598 1.27
covering_index_scan 7,202 9,112 1.27
groupby_scan 28,130 35,363 1.26
index_join 5,738 7,968 1.39
index_join_scan 2,074 3,175 1.53
types_table_scan 10,991 12,913 1.17
table_scan 8,371 10,618 1.27
oltp_read_only 129,729 172,452 1.33
Average 1.32

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 2,376 3,301 1.39
oltp_insert 16,308 22,802 1.40
oltp_update_index 40,892 47,790 1.17
oltp_update_non_index 31,740 35,721 1.13
oltp_delete_insert 30,666 41,304 1.35
oltp_write_only 13,999 18,685 1.33
types_delete_insert 15,624 18,785 1.20
oltp_read_write 71,107 96,404 1.36
Average 1.29

File-Backed

Reads

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 101,965 43,703 0.43
oltp_range_select 24,405 25,123 1.03
oltp_sum_range 22,870 23,299 1.02
oltp_order_range 3,954 4,524 1.14
oltp_distinct_range 5,055 5,708 1.13
oltp_index_scan 11,698 5,884 0.50
select_random_points 29,619 27,302 0.92
select_random_ranges 14,318 8,911 0.62
covering_index_scan 15,699 10,396 0.66
groupby_scan 29,161 36,280 1.24
index_join 9,963 8,759 0.88
index_join_scan 2,933 3,661 1.25
types_table_scan 11,932 12,940 1.08
table_scan 9,452 11,028 1.17
oltp_read_only 246,799 188,256 0.76
Average 0.92

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert 4,172 4,198 1.01
oltp_insert 17,976 24,831 1.38
oltp_update_index 42,020 48,742 1.16
oltp_update_non_index 32,705 36,619 1.12
oltp_delete_insert 31,410 41,771 1.33
oltp_write_only 14,926 19,423 1.30
types_delete_insert 16,436 19,155 1.17
oltp_read_write 71,630 97,278 1.36
Average 1.23

File-Backed (autocommit)

Each statement runs as its own transaction — exposes per-commit
fixed costs that the wrapped-in-BEGIN/COMMIT tests amortize away.
SQLite uses WAL mode with synchronous=FULL in this section so
the comparison uses SQLite's durable WAL autocommit path.

Reads

Reads have no commit cost; these are the same SQL files as the
File-Backed Reads section, included here for symmetry and to
catch any per-statement overhead doltlite pays on the read path.

Test SQLite (us) Doltlite (us) Multiplier
oltp_point_select 53,010 44,057 0.83
oltp_range_select 18,652 25,564 1.37
oltp_sum_range 17,093 23,378 1.37
oltp_order_range 3,414 4,500 1.32
oltp_distinct_range 4,489 5,712 1.27
oltp_index_scan 6,106 5,898 0.97
select_random_points 23,681 27,243 1.15
select_random_ranges 8,564 8,881 1.04
covering_index_scan 10,039 10,374 1.03
groupby_scan 28,670 36,055 1.26
index_join 6,977 8,773 1.26
index_join_scan 2,418 3,684 1.52
types_table_scan 11,375 12,989 1.14
table_scan 8,779 10,994 1.25
oltp_read_only 167,960 187,376 1.12
Average 1.19

Writes

Test SQLite (us) Doltlite (us) Multiplier
oltp_bulk_insert_ac 56,634 68,925 1.22
oltp_insert_ac 57,251 81,699 1.43
oltp_update_index_ac 57,871 90,921 1.57
oltp_update_non_index_ac 57,978 74,057 1.28
oltp_delete_insert_ac 61,631 86,084 1.40
oltp_write_only_ac 60,077 82,776 1.38
types_delete_insert_ac 56,338 71,749 1.27
oltp_read_write_ac 62,557 87,176 1.39
Average 1.37

1000 rows, median of 13 invocations per test, workload-only timing via host monotonic clock when available.

Performance Ceiling Check (1.8x individual, 1.5x average)

All tests within ceilings.

doltlite_revert_dirty.sh was written against the older "refuse only on
touched-table dirty" rule. With the new staged-anywhere check, two
tests need updating:

  * rv_dirty_same_refuses — expected error string updated from the
    old "cannot revert with uncommitted changes" to Dolt 2.0.5's
    "Your local changes would be overwritten by revert".

  * rv_staged_unrelated_* — was asserting that staged unrelated
    changes are folded into the revert commit. Under the new rule,
    any staged change refuses the revert (git's index-clean
    requirement), so flip the assertion: refuse, no new commit,
    target table unchanged, staged table still dirty.

Case 1 (unstaged unrelated → allowed) and case 4 (clean → allowed)
are unchanged; the new rule preserves those paths exactly.

Verified locally: 14/14 pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@timsehn timsehn merged commit b57fb1e into master May 20, 2026
10 checks passed
@timsehn timsehn deleted the fix/revert-match-dolt-2.0.5 branch May 21, 2026 01:42
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.

1 participant