Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
91370a0
refactor: pivot (#2138)
shehabgamin Jun 26, 2026
dff1432
feat: improve catalog providers (#2141)
linhr Jun 27, 2026
6321a85
feat: misc parity (#2142)
shehabgamin Jun 28, 2026
56f7f8c
fix: delta lake legacy protocol check blocking writes to delta-spark-…
zemin-piao Jun 28, 2026
2f2e119
chore: update OpenTelemetry dependencies (#2149)
linhr Jun 28, 2026
204f615
feat: improve `schema_of_json` function (#1225)
davidlghellin Jun 28, 2026
f691466
feat: unify `to_timestamp`/`try_to_timestamp`, honor ANSI, drop legac…
davidlghellin Jun 28, 2026
f68b2d9
fix: restore SPARK_REMOTE="local" JVM validation under PySpark 4.1 (#…
davidlghellin Jun 29, 2026
1112e64
feat: add `try_to_time`, unify `to_time` under SparkTime (#2094)
davidlghellin Jun 29, 2026
b40aa1a
feat: enable ANSI mode for `percentile_disc` (#1962)
davidlghellin Jun 29, 2026
b91259e
chore: prepare v0.6.5 (#2156)
linhr Jun 29, 2026
0a96356
fix: clickbench event date casting (#2162)
shehabgamin Jun 30, 2026
f0510da
fix: prevent data source work stealing in cluster mode (#2171)
linhr Jul 1, 2026
a3d2e39
chore: add release helper scripts (#2172)
linhr Jul 1, 2026
5d07d29
feat: add SHOW FUNCTIONS and DESCRIBE FUNCTION support (#2151)
lonless9 Jul 1, 2026
ee7a84d
deps(cargo): bump the all group with 2 updates (#2178)
dependabot[bot] Jul 2, 2026
e5b5a49
deps(npm): bump the all group with 11 updates (#2176)
dependabot[bot] Jul 2, 2026
312a18e
fix: preserve Spark function semantics across workers (#2182)
lonless9 Jul 3, 2026
68e73e0
fix: encode noop sink node for remote execution (#2191)
lonless9 Jul 3, 2026
2341ddf
fix: run lakehouse commits on driver (#2192)
lonless9 Jul 3, 2026
18def0b
fix: preserve all error cause in cluster mode (#2194)
linhr Jul 3, 2026
47d4e3e
fix: align Unity managed Delta staging and commit replay (#2195)
lonless9 Jul 4, 2026
1a55279
fix: encode Spark date_part and window functions remotely (#2199)
lonless9 Jul 4, 2026
be0bdc2
fix: codec for data sources (#2201)
linhr Jul 5, 2026
ce8eb4b
fix: honor NULL and overflow semantics in `make_ym_interval` (#2196)
davidlghellin Jul 5, 2026
0f5965d
perf: vectorize `spark_bround` with arrow::compute::binary (#2189)
davidlghellin Jul 5, 2026
373fff9
perf: build arrays with typed builders instead of Vec intermediates `…
davidlghellin Jul 5, 2026
f4bfe30
test: use temporary files to track Python data source states (#2202)
linhr Jul 5, 2026
70cc9c2
fix: recover Python data source options from table properties (#2203)
linhr Jul 5, 2026
37afe21
fix: return fields for struct function (#2204)
linhr Jul 5, 2026
34ead33
perf: improve to_csv performance (#2180)
davidlghellin Jul 5, 2026
92711dd
perf: use arrow `binary` kernel for scalar-unit `time_diff` (#2175)
davidlghellin Jul 5, 2026
23c0a63
perf: various funcs StringBuilder byte-capacity (#2174)
davidlghellin Jul 5, 2026
f356dac
fix: propagate NULL per-element in `make_timestamp_ntz` 6-arg branch …
davidlghellin Jul 5, 2026
71a8ed3
fix: support scalar subqueries in distributed execution (#2200)
lonless9 Jul 6, 2026
b751469
fix: work around Flight schema mismatch (#2207)
linhr Jul 6, 2026
f6d2925
docs: access Aliyun OSS via the `s3` URI scheme (#2209)
linhr Jul 6, 2026
411836f
fix: correct empty-aggregate fill values in `pivot` count and collect…
davidlghellin Jul 6, 2026
93afaab
perf: implement simplify hook on `concat` and null-fold (#2158)
davidlghellin Jul 6, 2026
f090e64
chore: prepare v0.6.6 (#2211)
linhr Jul 7, 2026
76d235e
feat: implement from_xml Spark function (#2098)
anarefolio Jul 8, 2026
867fa52
perf: implement simplify hook on `concat_ws` (#2157)
davidlghellin Jul 8, 2026
c4e8830
chore: migrate Rust edition to 2024 (#2208)
lonless9 Jul 8, 2026
2ee5f01
fix: correct ceil/floor edge-case bugs and ANSI overflow behavior (#1…
davidlghellin Jul 9, 2026
9350448
deps(cargo): bump the all group with 5 updates (#2218)
dependabot[bot] Jul 9, 2026
bd803eb
deps(npm): bump the all group with 5 updates (#2216)
dependabot[bot] Jul 9, 2026
82ec874
feat: add OpenAPI client code generator (#2215)
linhr Jul 9, 2026
0b9e8ba
chore: clippy 1.97.0 warnings (#2205)
lonless9 Jul 9, 2026
6f0ea59
refactor: bump Rust MSRV to 1.96.0 and adopt newer stable language fe…
lonless9 Jul 9, 2026
671c5ca
feat: migrate catalog OpenAPI clients (#2226)
linhr Jul 10, 2026
1a41104
fix: discriminator enum variants with common types in OpenAPI code ge…
linhr Jul 10, 2026
6870f74
fix: support MERGE INTO with path-based target and DataFrame source r…
Copilot Jul 10, 2026
dfc05ee
fix: align `to_xml` serialization with Spark semantics (#2233)
davidlghellin Jul 11, 2026
015b1f9
fix: match Spark ordering semantics for agg and window functions (#2228)
shehabgamin Jul 11, 2026
3cc4411
feat: reject multiple TABLE arguments in UDTFs unless explicitly enab…
davidlghellin Jul 11, 2026
401adb3
feat: add hms support for spark datasource tables (#2230)
santosh-d3vpl3x Jul 13, 2026
1500ebd
fix: count_min_sketch param types + optimize sketch aggregates (#2190)
davidlghellin Jul 14, 2026
ae73415
test: cover behaviour-governing arguments passed as a column (#2241)
davidlghellin Jul 14, 2026
68ada8a
fix: parallelize Iceberg data file writes (#2229)
lonless9 Jul 15, 2026
becd7cf
fix: measure BINARY in bytes for length, octet_length and bit_length …
davidlghellin Jul 15, 2026
19701f7
docs: refresh site favicon (#2249)
everettroeth Jul 16, 2026
5d3d5bb
deps(npm): bump the all group with 8 updates (#2245)
dependabot[bot] Jul 16, 2026
0a4dc97
deps(cargo): bump the all group with 8 updates (#2247)
dependabot[bot] Jul 16, 2026
15ff2ea
perf: optimize queries with linear sums (#2244)
lonless9 Jul 16, 2026
33b7110
feat: push down projections through ExplicitRepartitionExec (#2183)
nis12ram Jul 16, 2026
012157d
fix: resolve `next_day` day names per row and stop trimming them (#2254)
davidlghellin Jul 16, 2026
97169ba
test: fix Delta location for Windows (#2256)
linhr Jul 17, 2026
97e9141
test: skip Spark 3 Writer V2 provider test (#2258)
pomykalakyle Jul 18, 2026
63a4065
fix: handle nullable checkpoint fields and JSON replay schemas for De…
lonless9 Jul 20, 2026
5254626
fix: honor Spark's lambda short-circuit in `exists` and `forall` unde…
davidlghellin Jul 21, 2026
90421cb
feat: share driver server among sessions (#2253)
linhr Jul 21, 2026
54e9abf
fix: improve shared driver server (#2269)
linhr Jul 21, 2026
131856a
perf: use datafusion_common's fast HashMap/HashSet on hot paths (#2273)
davidlghellin Jul 21, 2026
f1d2af9
perf: build arrays_zip result with a single take instead of per-row c…
davidlghellin Jul 22, 2026
b247b02
feat: support the DataFrame inputFiles operation (#2239)
fangchenli Jul 22, 2026
144c55d
deps(npm): bump the all group with 11 updates (#2276)
dependabot[bot] Jul 23, 2026
52caae9
deps(cargo): bump the all group with 16 updates (#2278)
dependabot[bot] Jul 23, 2026
b5195fe
feat: support explicit Glue catalog IDs (#2285)
pomykalakyle Jul 24, 2026
38fc22f
test: do not mention specific Spark version (#2286)
linhr Jul 24, 2026
76c8627
fix: improve path glob filtering (#2284)
rohankumardubey Jul 25, 2026
6d1e068
test: configure stack size for function gold tests (#2290)
linhr Jul 25, 2026
e42e06d
feat: full java datetime support (#2099)
twsl Jul 25, 2026
5689106
chore: support Spark 4.2 (#2289)
linhr Jul 27, 2026
862ff9d
fix: delta nested column mapping fix (#2266)
zemin-piao Jul 27, 2026
90ece12
chore: bump quinn-proto from 0.11.14 to 0.11.16 in the cargo group ac…
dependabot[bot] Jul 27, 2026
7d4d015
feat: versioned Spark config (#2296)
linhr Jul 27, 2026
038eb80
docs: add guide for Spark version update (#2302)
linhr Jul 28, 2026
3a2c888
chore: update Spark patch versions (#2307)
linhr Jul 28, 2026
4c6f463
test: migrate function doctests to feature files and consolidate with…
davidlghellin Jul 28, 2026
5abb583
feat: support Aliyun OSS object storage (#2283)
weixiuli Jul 28, 2026
0c8c90a
chore: bump datafusion to 54.1.0 (#2293)
lonless9 Jul 28, 2026
23a3653
feat: add basic checkpoint support (#2270)
lonless9 Jul 29, 2026
33ecb39
feat: blocking shuffle via object storage (#2232)
linhr Jul 29, 2026
0e1cbf8
fix: honor absolute Iceberg write data paths (#2274)
lonless9 Jul 29, 2026
160e53e
feat: heartbeat for command execution (#2323)
linhr Jul 30, 2026
88cf927
deps(npm): bump eslint from 10.7.0 to 10.8.0 in the all group (#2317)
dependabot[bot] Jul 30, 2026
3456d2a
deps(cargo): bump the all group with 2 updates (#2319)
dependabot[bot] Jul 30, 2026
2d31ebe
refactor: move distributed EXPLAIN output to CODEGEN mode (#2316)
lonless9 Jul 30, 2026
6fdd815
fix: improve Spark datetime compatibility (#2322)
lonless9 Jul 30, 2026
f6bdd95
fix: allow Iceberg REST create-and-write with access session hints (#…
lonless9 Jul 30, 2026
ed524b6
fix: stop driver server properly (#2326)
linhr Jul 30, 2026
41ffda5
refactor: consolidate schema type merging logic (#2312)
rohankumardubey Jul 30, 2026
58d2efc
fix: always report job runner history (#2327)
linhr Jul 31, 2026
e2b130e
refactor: specify components for actor creation (#2329)
linhr Jul 31, 2026
1327bbb
feat!: remove the `extension` option for Parquet data source (#2330)
linhr Jul 31, 2026
7d646dd
fix: preserve DDL parsing errors during schema fallback (#2332)
shehabgamin Jul 31, 2026
72a4373
fix: validate CSV expression function options like Spark (#2255)
davidlghellin Aug 1, 2026
5d11b9f
perf: optimize regexp_replace for anchored capture extraction (#2303)
lonless9 Aug 1, 2026
b8f3117
fix: require cascade for non-empty memory databases (#2336)
ShiroKSH Aug 2, 2026
021b990
feat!: update OpenTelemetry settings (#2340)
linhr Aug 2, 2026
fbcc46c
feat: support a bearer token file for the Iceberg REST catalog (#2288)
Robin-Everaars Aug 2, 2026
ff6fdd7
feat: adjust checkpoint and shuffle storage paths (#2341)
linhr Aug 2, 2026
862e9c0
fix: cast view-type inputs in Arrow-optimized Python UDFs (#2334)
shehabgamin Aug 2, 2026
eefc088
fix: harden Delta column mapping for schema evolution (#2324)
lonless9 Aug 2, 2026
2fe1bda
test: use local path for Delta mergeSchema write (#2344)
lonless9 Aug 3, 2026
dc4dda9
docs: update user guides and development notes (#2346)
linhr Aug 3, 2026
4874e9e
chore: rename default shuffle backend (#2347)
linhr Aug 3, 2026
f0b137d
chore: prepare v0.7.0 (#2342)
linhr Aug 3, 2026
05fc1c7
test: improve function test selection (#2352)
linhr Aug 4, 2026
31463cc
fix: retry Iceberg REST bootstrap authentication (#2348)
Robin-Everaars Aug 4, 2026
2a9cb50
fix: validate explicit Parquet read schemas (#2351)
rohankumardubey Aug 5, 2026
24a2f20
test: initialize the global state when reusing an existing server (#2…
davidlghellin Aug 5, 2026
2201c88
refactor: move server and telemetry code (#2355)
linhr Aug 5, 2026
8048b2f
feat: support basic merge operation for Iceberg (#2222)
lonless9 Aug 5, 2026
996761a
refactor: improve child actor management (#2359)
linhr Aug 5, 2026
cf0d089
feat: list Spark 4.2 built-in functions (#2325)
lonless9 Aug 5, 2026
3564786
docs: add LangChain integration guide (#2354)
pomykalakyle Aug 5, 2026
65ee80b
deps(cargo): bump the all group with 6 updates (#2366)
dependabot[bot] Aug 6, 2026
fb6e310
deps(npm): bump vue-tsc from 3.3.8 to 3.3.9 in the all group (#2363)
dependabot[bot] Aug 6, 2026
50567c7
fix: make Python data source options case-insensitive (#2371)
ErikBPF Aug 6, 2026
d97f7e5
fix: resolve Delta MERGE constraints by visible names
alexy Aug 5, 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
  •  
  •  
  •  
10 changes: 0 additions & 10 deletions .cursor/rules/formatting.mdc

This file was deleted.

4 changes: 0 additions & 4 deletions .cursor/rules/python-env.mdc

This file was deleted.

4 changes: 2 additions & 2 deletions .github/agents/spark-test-expert.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ Once you have identified the failed test cases from the logs, or if the failed t
Run the tests inside the Hatch environments defined in `pyproject.toml`.
The following test environments are currently available:

- `test-spark.spark-3.5.7`
- `test-spark.spark-4.1.1`
- `test-spark.spark-3.5.9`
- `test-spark.spark-4.2.0`
- `test-ibis`

The `test-spark.spark-*` environments support running PySpark unit tests and doctests. The `test-ibis` environment supports running Ibis unit tests with PySpark as the backend.
Expand Down
2 changes: 2 additions & 0 deletions .github/instructions/dev.instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ Tests use "gold data" files for validation. If you change logic that affects out
env SAIL_UPDATE_GOLD_DATA=1 cargo nextest run
```

Please do not add test cases manually to the gold data files.

### Python Development

- **Formatting**: `hatch fmt`
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ jobs:
strategy:
fail-fast: false
matrix:
spark-version: ["3.5.7", "4.1.1"]
spark-version: ["3.5.9", "4.2.0"]
with:
spark_version: ${{ matrix.spark-version }}
needs:
Expand All @@ -134,7 +134,7 @@ jobs:
strategy:
fail-fast: false
matrix:
spark-version: ["3.5.7", "4.0.1", "4.1.1"]
spark-version: ["3.5.9", "4.0.4", "4.1.3", "4.2.0"]
with:
spark_version: ${{ matrix.spark-version }}
needs:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/catalog-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
name: Test
runs-on: ubuntu-latest
env:
HATCH_ENV: "test.spark-4.1.1"
HATCH_ENV: "test.spark-4.2.0"
# Coverage environment variables
RUSTC_WORKSPACE_WRAPPER: ${{ github.workspace }}/.github/scripts/rustc-workspace-wrapper.sh
LLVM_PROFILE_FILE: ${{ github.workspace }}/target/sail-catalog-it-%p-%m.profraw
Expand Down Expand Up @@ -75,5 +75,5 @@ jobs:
files: coverage-catalog-it.info
flags: catalog-integration-tests
name: catalog-integration-tests
fail_ci_if_error: true
fail_ci_if_error: ${{ github.repository == 'lakehq/sail' }}
env_vars: OS
1 change: 1 addition & 0 deletions .github/workflows/docs-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ on:
jobs:
docs-deploy:
name: Docs Deploy
if: ${{ github.repository == 'lakehq/sail' }}
runs-on: ubuntu-slim
environment: docs/${{ inputs.stage }}
permissions:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/gold-data-script-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
with:
repository: apache/spark
path: opt/spark
ref: v4.1.1
ref: v4.2.0
fetch-depth: 1

- uses: actions/setup-java@v5
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ibis-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ jobs:
files: coverage-ibis.info
flags: ibis-tests
name: ibis-tests
fail_ci_if_error: true
fail_ci_if_error: ${{ github.repository == 'lakehq/sail' }}
env_vars: OS

- name: Upload Test Logs
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/multi-platform-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,13 @@ jobs:
platforms.push({ runner: 'ubuntu-24.04-arm', target: 'aarch64', os: 'linux' });
}
if (context.payload.inputs.build_macos_x86_64 == 'true') {
platforms.push({ runner: 'macos-15-intel', target: 'x86_64', os: 'macos' });
platforms.push({ runner: 'macos-26-intel', target: 'x86_64', os: 'macos' });
}
if (context.payload.inputs.build_macos_aarch64 == 'true') {
platforms.push({ runner: 'macos-14', target: 'aarch64', os: 'macos' });
platforms.push({ runner: 'macos-26', target: 'aarch64', os: 'macos' });
}
if (context.payload.inputs.build_windows_x64 == 'true') {
platforms.push({ runner: 'windows-2022', target: 'x64', os: 'windows' });
platforms.push({ runner: 'windows-2025', target: 'x64', os: 'windows' });
}
return platforms;

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,5 @@ jobs:
files: coverage-python-${{ inputs.spark_version }}.info
flags: python-unit-tests
name: python-unit-tests
fail_ci_if_error: true
fail_ci_if_error: ${{ github.repository == 'lakehq/sail' }}
env_vars: OS
30 changes: 16 additions & 14 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,13 @@ jobs:
- runner: ubuntu-24.04-x64-8-core
target: aarch64
os: linux
- runner: macos-15-intel
- runner: macos-26-intel
target: x86_64
os: macos
- runner: macos-14
- runner: macos-26
target: aarch64
os: macos
- runner: windows-2022
- runner: windows-2025
target: x64
os: windows
steps:
Expand Down Expand Up @@ -251,9 +251,9 @@ jobs:
platform:
- runner: ubuntu-24.04-x64-8-core
- runner: ubuntu-24.04-arm-8-core
- runner: macos-15-intel
- runner: macos-14
- runner: windows-2022
- runner: macos-26-intel
- runner: macos-26
- runner: windows-2025
needs:
- setup
- build-sdist
Expand Down Expand Up @@ -312,9 +312,9 @@ jobs:
platform:
- runner: ubuntu-24.04
- runner: ubuntu-24.04-arm
- runner: macos-15-intel
- runner: macos-14
- runner: windows-2022
- runner: macos-26-intel
- runner: macos-26
- runner: windows-2025
needs:
- setup
- build-wheel
Expand Down Expand Up @@ -351,19 +351,21 @@ jobs:
- test-sdist
- test-wheel
steps:
- uses: actions/checkout@v7

- uses: actions/download-artifact@v7
with:
pattern: "package-*"
path: dist
merge-multiple: true

- uses: actions/setup-python@v6
with:
python-version: "3.11"

- name: Show Release Artifacts
shell: bash
run: |
find dist -name '*.tar.gz' -exec echo '{}' \; -exec tar -tvf '{}' \;
find dist -name '*.whl' -exec unzip -l '{}' \;
ls -lah dist
md5sum dist/*
run: scripts/release/review_packages.py --path dist >> "$GITHUB_STEP_SUMMARY"

release-pypi:
name: Release to PyPI
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,16 @@ jobs:
continue-on-error: true
with:
workflow_run_id: ${{ github.event.workflow_run.id }}
artifact_name: spark-3.5.7-test-report
report_name: spark-3.5.7-test
artifact_name: spark-3.5.9-test-report
report_name: spark-3.5.9-test

- uses: ./.github/actions/pull-request-report
if: github.event.workflow_run.name == 'Build'
continue-on-error: true
with:
workflow_run_id: ${{ github.event.workflow_run.id }}
artifact_name: spark-4.1.1-test-report
report_name: spark-4.1.1-test
artifact_name: spark-4.2.0-test-report
report_name: spark-4.2.0-test

- uses: ./.github/actions/pull-request-report
if: github.event.workflow_run.name == 'Build'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/rust-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
files: coverage-rust-unit.info
flags: rust-unit-tests
name: rust-unit-tests
fail_ci_if_error: true
fail_ci_if_error: ${{ github.repository == 'lakehq/sail' }}
env_vars: OS

- name: Install Kerberos client tools
Expand Down Expand Up @@ -99,5 +99,5 @@ jobs:
files: coverage-rust-slow.info
flags: rust-slow-tests
name: rust-slow-tests
fail_ci_if_error: true
fail_ci_if_error: ${{ github.repository == 'lakehq/sail' }}
env_vars: OS
2 changes: 1 addition & 1 deletion .github/workflows/spark-package-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
strategy:
fail-fast: false
matrix:
spark-version: ["3.5.7", "4.1.1"]
spark-version: ["3.5.9", "4.2.0"]
steps:
- uses: actions/checkout@v7

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spark-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ jobs:
files: coverage-spark-${{ inputs.spark_version }}.info
flags: spark-tests
name: spark-tests
fail_ci_if_error: true
fail_ci_if_error: ${{ github.repository == 'lakehq/sail' }}
env_vars: OS

- name: Upload Test Logs
Expand Down
8 changes: 3 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ out/
/opt/

# Editor directories and files
.cursor/
.idea/
.vscode/*
*.iml
Expand Down Expand Up @@ -100,11 +99,10 @@ docs/.vitepress/.temp
# LLVM coverage files
*.profraw

# Claude Code settings
# AI coding configuration files and artifacts
.cursor/
.claude/
.worktrees/

CLAUDE.md
AGENTS.md
# roborev snapshots
/.roborev/
.roborev/
Loading
Loading