Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
564 commits
Select commit Hold shift + click to select a range
f9919c0
ci: split into two tiers and add merge_group trigger for a merge queue
solace-aross Sep 25, 2026
c06e840
ci: key non-PR concurrency on ref@sha, assert Tier A ran on PRs
solace-aross Sep 25, 2026
fbf6676
ci: keep smoke in the ci-gate
solace-aross Sep 25, 2026
139af87
fix(slatedb): treat update_group without a version as create-only
sgamelin Sep 25, 2026
55dd08e
Merge origin/main into 757-slatedb-update-group-create-only
sgamelin Sep 25, 2026
b26d8a2
ci: MERGE_QUEUE rollback switch, named ci-gate failures, pin example-…
solace-aross Sep 25, 2026
7fc3cf0
ci: keep the fork-PR guard on package push and smoke
solace-aross Sep 25, 2026
f7b8d49
Merge pull request #756 from nisshi-io/753-single-test-binary-per-crate
sgamelin Sep 25, 2026
11fcb82
test: cover restart, stale versions and racing group updates
sgamelin Sep 25, 2026
6d690f6
Merge remote-tracking branch 'origin/main' into 757-slatedb-update-gr…
sgamelin Sep 25, 2026
6b45c1f
test(broker): move group update tests into the it binary
sgamelin Sep 25, 2026
73f2e22
Merge pull request #759 from nisshi-io/ci/merge-queue-two-tier
solace-aross Sep 25, 2026
e724e43
docs: CLAUDE.md toolchain is 1.98, CI pipeline is two-tier
solace-aross Sep 25, 2026
76129a1
Merge pull request #763 from nisshi-io/757-slatedb-update-group-creat…
sgamelin Sep 25, 2026
0822346
Merge pull request #767 from nisshi-io/docs/claude-md-toolchain-ci
solace-aross Sep 25, 2026
c8ec9f0
build(deps): bump taiki-e/install-action from 2.87.13 to 2.87.18
dependabot[bot] Sep 25, 2026
27717ab
build(deps): bump actions-rust-lang/setup-rust-toolchain
dependabot[bot] Sep 25, 2026
2cb9391
ci: preserve release job's warning-denial opt-out under setup-rust-to…
solace-aross Sep 27, 2026
09d1d75
Merge pull request #758 from nisshi-io/dependabot/github_actions/main…
solace-aross Sep 27, 2026
7987e89
build(deps): bump digest from 0.10.7 to 0.11.3
dependabot[bot] Jul 31, 2026
5f143d4
Merge pull request #703 from nisshi-io/dependabot/cargo/main/digest-0…
solace-aross Sep 28, 2026
26ea578
build(deps): bump console from 0.16.4 to 0.16.6
dependabot[bot] Sep 28, 2026
72a7a88
build(deps): bump futures from 0.3.33 to 0.3.34
dependabot[bot] Sep 28, 2026
bce9eb5
build(deps): bump http-body-util from 0.1.4 to 0.1.5
dependabot[bot] Sep 28, 2026
ea3e0a5
build(deps): bump crate-ci/typos from 1.50.2 to 1.50.3
dependabot[bot] Sep 28, 2026
96514c8
build(deps): bump taiki-e/install-action from 2.87.18 to 2.87.20
dependabot[bot] Sep 28, 2026
220c853
Merge pull request #750 from nisshi-io/dependabot/github_actions/main…
solace-aross Sep 28, 2026
0e520f2
build(deps): bump deadpool from 0.12.3 to 0.13.1
dependabot[bot] Sep 28, 2026
2847f71
Merge pull request #769 from nisshi-io/dependabot/cargo/main/console-…
solace-aross Sep 28, 2026
b479324
Merge pull request #770 from nisshi-io/dependabot/cargo/main/futures-…
solace-aross Sep 28, 2026
9934192
Merge pull request #772 from nisshi-io/dependabot/cargo/main/http-bod…
solace-aross Sep 28, 2026
e33d6e1
Merge pull request #775 from nisshi-io/dependabot/github_actions/main…
solace-aross Sep 28, 2026
4db65d8
Merge pull request #776 from nisshi-io/dependabot/github_actions/main…
solace-aross Sep 28, 2026
70b42a0
build(deps): bump github/codeql-action init+analyze to 4.38.2
solace-aross Sep 28, 2026
61073de
build(deps): bump deadpool-postgres to 0.14.2 to match deadpool 0.13.1
solace-aross Sep 28, 2026
18a8e02
ci(test): install cargo-nextest prebuilt instead of building it
sgamelin Sep 28, 2026
843f410
ci(third-party-license): install cargo-about prebuilt
sgamelin Sep 28, 2026
a48b951
ci: drop the check job, clippy already compiles the same targets
sgamelin Sep 28, 2026
ff384be
ci(test): cache test's build, saved from main's postgres:17 leg
sgamelin Sep 28, 2026
050288b
ci: add job timeouts and a nextest ci profile that kills hung tests
sgamelin Sep 28, 2026
4b428a3
ci: save Rust caches from main only, not from v* tags
sgamelin Sep 28, 2026
9528c0f
Merge remote-tracking branch 'origin/main' into ci/777-test-speedups
sgamelin Sep 28, 2026
5f5cfda
Add baseline open source governance docs
solace-aross Sep 28, 2026
699d06f
Merge pull request #773 from nisshi-io/dependabot/cargo/main/deadpool…
solace-aross Sep 28, 2026
0fdfe4b
Merge pull request #779 from nisshi-io/ci/777-test-speedups
sgamelin Sep 28, 2026
d1255f0
fix(sans-io): bound wire-supplied counts before allocating in batch d…
solace-aross Sep 28, 2026
5bdb5e8
fix(storage): reject produce batches whose last_offset_delta disagree…
solace-aross Sep 29, 2026
23b19b5
fix(storage): stop DeleteGroups with an empty group id wiping every g…
solace-aross Sep 29, 2026
5bb9db7
docs(governance): make broader-impact approval visible on the PR
solace-aross Sep 29, 2026
7c1f5a8
fix(storage): validate topic names and partition counts in CreateTopics
solace-aross Sep 29, 2026
ead6cac
chore: copy .env into Claude Code worktrees and document worktree builds
sgamelin Sep 29, 2026
2495c72
fix(broker): reject out-of-range session_timeout_ms in JoinGroup
solace-aross Sep 29, 2026
f7d6ed5
fix(proxy): keep offset deltas contiguous when coalescing produce bat…
solace-aross Sep 29, 2026
bbf8b10
fix(storage): accept "" in DeleteGroups on backends that can store it
solace-aross Sep 29, 2026
2ac110e
test(sans-io): pin the header-count preallocation caps
solace-aross Sep 29, 2026
86290bb
refactor(storage): simplify the CreateTopics partition-count check
solace-aross Sep 29, 2026
fc3d6df
build(deps): bump zstd from 0.13.3 to 0.14.0
dependabot[bot] Sep 29, 2026
ff07a86
build(deps): bump taiki-e/install-action from 2.87.18 to 2.87.21
dependabot[bot] Sep 29, 2026
9a487d7
Merge pull request #781 from nisshi-io/opensource-governance
solace-aross Sep 29, 2026
785fda9
Merge pull request #793 from nisshi-io/dependabot/cargo/main/zstd-0.14.0
solace-aross Sep 29, 2026
62a2048
Merge pull request #794 from nisshi-io/dependabot/github_actions/main…
solace-aross Sep 29, 2026
dbe8370
Merge pull request #783 from nisshi-io/fix/validate-produce-last-offs…
solace-aross Sep 29, 2026
86c43e6
build(deps): upgrade cached from 0.56.0 to 2.0.2
solace-aross Sep 29, 2026
16d19ce
Merge pull request #787 from nisshi-io/docs/worktree-builds
sgamelin Sep 29, 2026
8707ec2
build: pull MinIO from pgsty/silo instead of building it from source
sgamelin Sep 29, 2026
24c7cde
Merge pull request #788 from nisshi-io/fix/join-group-session-timeout
solace-aross Sep 29, 2026
69a6170
Merge pull request #778 from nisshi-io/ci/codeql-action-4.38.2
solace-aross Sep 29, 2026
ec407fb
Merge pull request #800 from nisshi-io/ci/pgsty-silo
sgamelin Sep 29, 2026
9aa1cc8
build(deps): upgrade syn from 2 to 3.0.3 with prettyplease 0.3
solace-aross Sep 30, 2026
f877b9f
Merge pull request #784 from nisshi-io/fix/delete-groups-empty-id
solace-aross Sep 30, 2026
fc7c516
build(deps): upgrade OpenTelemetry to 0.32 (opentelemetry_sdk 0.32.1)
solace-aross Sep 30, 2026
7a79a53
fix(storage): reject client Produce batches that set the control bit
solace-aross Sep 30, 2026
fda088e
Merge pull request #799 from nisshi-io/deps/cached-2
solace-aross Sep 30, 2026
0f1e3a1
Merge pull request #804 from nisshi-io/deps/opentelemetry-0.32
solace-aross Sep 30, 2026
308dae4
build(deps): upgrade slatedb from 0.10.1 to 0.14.1
solace-aross Sep 29, 2026
c79ef66
ci(dependabot): switch to weekly cadence
solace-aross Sep 30, 2026
7cbc5b3
docs(readme): link contributing, code of conduct, security, and gover…
solace-aross Sep 30, 2026
199699b
docs(contributing): state acceptance criteria and DCO position
solace-aross Sep 30, 2026
ef86798
Merge pull request #810 from nisshi-io/sol-154820-readme-contrib-links
solace-aross Sep 30, 2026
a75631e
Merge pull request #809 from nisshi-io/ci/dependabot-weekly-cadence
solace-aross Sep 30, 2026
88873f3
Merge pull request #803 from nisshi-io/deps/syn-3
solace-aross Sep 30, 2026
12bf130
ci: add CHANGELOG.md and an advisory changelog-update check
solace-aross Sep 30, 2026
86adc17
Merge pull request #811 from nisshi-io/sol-154822-contribution-govern…
solace-aross Sep 30, 2026
914f52e
Merge pull request #786 from nisshi-io/fix/create-topics-validation
solace-aross Sep 30, 2026
1ca8f07
Merge pull request #782 from nisshi-io/fix/bound-record-batch-allocat…
solace-aross Sep 30, 2026
a5dd3e9
Merge pull request #795 from nisshi-io/fix/reject-client-control-batches
solace-aross Sep 30, 2026
26c5146
Merge pull request #812 from nisshi-io/sol-155096-changelog
solace-aross Sep 30, 2026
a296907
Merge pull request #802 from nisshi-io/deps/slatedb-0.14
solace-aross Sep 30, 2026
1694319
build(deps): bump thiserror from 2.0.19 to 2.0.21
dependabot[bot] Oct 1, 2026
7d89055
Merge pull request #819 from nisshi-io/dependabot/cargo/main/thiserro…
solace-aross Oct 2, 2026
1476899
build: add `just seed-target` to reuse dependency builds in new workt…
sgamelin Oct 2, 2026
36fbee4
build: seed only target/debug, and move the seed into place last
sgamelin Oct 2, 2026
edb9be9
docs: fix the doc comments that rustdoc rejects
sgamelin Oct 2, 2026
df83ba2
ci: fail on a rustdoc warning, also in the docs of private items
sgamelin Oct 2, 2026
4abcf50
docs: add comment rules for contributors and agents
sgamelin Oct 2, 2026
65f31b2
docs: give each feature its own test file
sgamelin Oct 2, 2026
1efe0ef
docs: link the comment rules from CONTRIBUTING.md
sgamelin Oct 2, 2026
13c2966
Merge pull request #825 from nisshi-io/822-comment-rules
sgamelin Oct 2, 2026
4f76946
Merge pull request #824 from nisshi-io/chore/seed-worktree-target
sgamelin Oct 2, 2026
f204a03
docs: reconcile CLAUDE.md with post-storage-split crate layout
solace-aross Sep 30, 2026
05ed898
build(deps): upgrade arrow/parquet to 58 with iceberg 0.10 and deltal…
solace-aross Sep 29, 2026
d6d3ba9
fix(schema): address iceberg upgrade review feedback
solace-aross Sep 30, 2026
9fc544f
fix: limit request decoding before authentication and to the frame's …
solace-aross Oct 1, 2026
ba18724
fix: close review findings on the pre-authentication frame size cap a…
solace-aross Oct 1, 2026
208986b
fix: test the pre-authentication frame size limit end to end and name…
solace-aross Oct 2, 2026
b57b575
refactor: move topic name validation into nisshi-sans-io
solace-aross Oct 3, 2026
3ba7c6a
fix: cap total partitions per CreateTopics request at 10,000
solace-aross Oct 3, 2026
588a9d8
fix: isolate mpsc-mode storage requests so one panic or cancellation …
solace-aross Oct 3, 2026
306c93f
test: add coverage for the supervisor loop's channel-close exit path
solace-aross Oct 3, 2026
af8ebfa
fix(sans-io): bound tagged deserialize_str allocation to message_max_…
solace-aross Oct 4, 2026
eaf7fe9
Merge pull request #801 from nisshi-io/deps/arrow-parquet-58
solace-aross Oct 5, 2026
6872a12
Merge pull request #823 from nisshi-io/fix/sol-155083-pre-auth-decode…
solace-aross Oct 5, 2026
754d083
Merge pull request #828 from nisshi-io/fix/sol-155175-topic-name-vali…
solace-aross Oct 5, 2026
dd6d9bd
build(deps): bump tracing-opentelemetry from 0.33.0 to 0.34.0
dependabot[bot] Oct 5, 2026
322292f
build(deps): bump cached from 2.0.2 to 4.0.1
dependabot[bot] Oct 5, 2026
bf25ce0
build(deps): bump rhai-rand from 0.1.7 to 0.2.0
dependabot[bot] Oct 5, 2026
1c52f25
build(deps): bump taiki-e/install-action from 2.87.21 to 2.87.22
dependabot[bot] Oct 5, 2026
5bdf53f
fix: cap the decompressed size of a produced batch
solace-aross Oct 1, 2026
a122f2f
test: prove the decompression limit is wired into gzip/lz4/zstd
solace-aross Oct 1, 2026
a5d1180
fix: bound record_count by decoded struct size, not minimum wire size
solace-aross Oct 1, 2026
c50bd09
docs: note the capped-allocator test's nextest dependency explicitly
solace-aross Oct 1, 2026
ed4b44a
fix: bound decoded batch memory with one budget and report it as MESS…
solace-aross Oct 1, 2026
166fed3
docs: drop the intra-doc link to a crate-private constant
solace-aross Oct 2, 2026
7c509fd
docs: state the decoded-batch bound as a budget, not an exact peak
solace-aross Oct 2, 2026
d460282
test: pin LimitedRead in the record decode, replace the slow limit tests
solace-aross Oct 2, 2026
470c707
fix: log a libSQL produce over the decode limit once, at warn
solace-aross Oct 2, 2026
e0690f4
test: cover the by-reference decode path in the header-bomb tests
solace-aross Oct 5, 2026
7974705
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
a0c67d8
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
0e109ca
chore: ignore sha2 >0.10.9 in dependabot
solace-aross Oct 5, 2026
ea234d2
fix: migrate TtlSortedCache calls to cached 4.0's CachedExt/set_with API
solace-aross Oct 5, 2026
b1cfe10
Merge pull request #821 from nisshi-io/fix/sol-155080-cap-decompresse…
solace-aross Oct 5, 2026
5e93754
build(deps): bump convert_case from 0.11.0 to 0.12.0
dependabot[bot] Oct 6, 2026
8f4f93b
Merge pull request #856 from nisshi-io/dependabot/cargo/main/tracing-…
solace-aross Oct 6, 2026
5e1ef8a
Merge pull request #858 from nisshi-io/dependabot/cargo/main/cached-4…
solace-aross Oct 6, 2026
932cba6
Merge pull request #859 from nisshi-io/dependabot/cargo/main/rhai-ran…
solace-aross Oct 6, 2026
14266db
Merge pull request #860 from nisshi-io/dependabot/github_actions/main…
solace-aross Oct 6, 2026
3fba61c
Merge pull request #857 from nisshi-io/dependabot/cargo/main/convert_…
solace-aross Oct 6, 2026
a6f33b2
docs: drop the hardcoded crate count from CLAUDE.md
solace-aross Oct 6, 2026
ca9d9dd
fix(storage): count CreateTopics assignments toward the partition cap
solace-aross Oct 6, 2026
91a61ee
fix(storage): label mpsc supervisor failures accurately and pin seque…
solace-aross Oct 6, 2026
f8cd52d
docs(sans-io): state what the tagged deserialize_str test pins
solace-aross Oct 6, 2026
8970e3f
test(sans-io): cover the flexible length branch of deserialize_bytes
solace-aross Oct 6, 2026
9208126
fix(sans-io): bound a record's header/key/value reads to its declared…
solace-aross Oct 3, 2026
3036529
docs: fix remaining comments.md violations sgamelin flagged
solace-aross Oct 5, 2026
34af6eb
fix(sans-io): encode a record's length from its fields
solace-aross Oct 6, 2026
d4c963b
Merge pull request #836 from nisshi-io/fix/sol-155270-mpsc-resilience
solace-aross Oct 6, 2026
c46ec6a
Merge pull request #831 from nisshi-io/fix/sol-155176-record-header-c…
solace-aross Oct 6, 2026
4b0ea2f
Merge pull request #846 from nisshi-io/fix/sol-155333-tagged-str-guard
solace-aross Oct 6, 2026
7661830
Merge pull request #832 from nisshi-io/fix/sol-155177-deserialize-byt…
solace-aross Oct 6, 2026
56ab574
Merge pull request #830 from nisshi-io/fix/sol-155174-partition-count…
solace-aross Oct 6, 2026
12dd79e
Merge pull request #813 from nisshi-io/docs/sol-154817-claude-md-crat…
solace-aross Oct 6, 2026
a7230da
Merge pull request #861 from nisshi-io/chore/dependabot-ignore-sha2-0.11
solace-aross Oct 6, 2026
4e8daab
build(deps): bump opentelemetry-semantic-conventions
dependabot[bot] Oct 6, 2026
cbed866
ci: name the exact action versions in two SHA pin comments
solace-aross Oct 7, 2026
29bd826
Merge pull request #874 from nisshi-io/ci/fix-ref-version-mismatch-co…
solace-aross Oct 7, 2026
9a7dcd4
ci: write the full version in every action pin comment
sgamelin Oct 7, 2026
90f9d1e
fix: ListOffsets by timestamp returns -1, not 0, when no record matches
solace-aross Oct 3, 2026
7f6ce57
fix: avoid same-millisecond race in list_offsets single_record test
solace-aross Oct 3, 2026
00d7261
docs: drop a remote comment pointing at another backend's internals
solace-aross Oct 5, 2026
418cf12
docs(storage): state the ListOffsetResponse no-offset rule once
solace-aross Oct 6, 2026
aba4286
test: pin ListOffsets no-match on a non-empty partition and the null …
solace-aross Oct 6, 2026
58bb5f7
fix: bind the broker dual-stack and resolve loopback by IP (SOL-155095)
solace-aross Oct 4, 2026
9897910
test: cover the IPv4-literal bind path in configure_listener (SOL-155…
solace-aross Oct 4, 2026
cbcf544
docs: tidy a comment to match .claude/rules/comments.md
solace-aross Oct 5, 2026
8494ff8
fix: fall back to IPv4 when the host has no IPv6, and tighten listene…
solace-aross Oct 6, 2026
cafdfab
Fail clearly on bad storage config, lake-without-registry, and unauth…
solace-aross Oct 5, 2026
103b240
Address round-2 review: remove second dead error variant, add clear C…
solace-aross Oct 5, 2026
82215ee
fix: resolve typos CI failure in doc comment
solace-aross Oct 5, 2026
7d37ca0
fix: keep interval options in the broker, and log pre-auth rejections…
solace-aross Oct 6, 2026
dc5bb6d
fix: satisfy the typos check in storage option tests
solace-aross Oct 6, 2026
5d28848
ci: close the CI/CD supply-chain gaps from the security review (SOL-1…
solace-aross Oct 4, 2026
b378ff3
fix: add --no-verify to release.yml's cargo publish (SOL-155138 review)
solace-aross Oct 4, 2026
e9fc682
docs: tidy a dependabot.yml comment to match .claude/rules/comments.md
solace-aross Oct 5, 2026
f79fd64
ci: let cargo-deny float and state CI comments as end state
solace-aross Oct 6, 2026
f23a888
docs: say tags are pushed by hand and not enforced by a ruleset
solace-aross Oct 7, 2026
f72fcc6
ci: gate zizmor's artipacked audit at every threshold
solace-aross Oct 7, 2026
0e1e4bb
Merge pull request #838 from nisshi-io/fix/sol-155073-list-offsets-no…
solace-aross Oct 7, 2026
3428323
Merge pull request #843 from nisshi-io/fix/sol-155095-macos-ipv6-loca…
solace-aross Oct 7, 2026
786eb0d
Merge pull request #850 from nisshi-io/fix/sol-155256-fail-clearly
solace-aross Oct 7, 2026
6111d03
Merge pull request #848 from nisshi-io/fix/sol-155138-cicd-supply-chain
solace-aross Oct 7, 2026
9214019
build: reduce debug info in dev builds
sgamelin Oct 7, 2026
f054fcf
build(deps): bump tokio from 1.53.1 to 1.53.2
dependabot[bot] Oct 7, 2026
7e890f0
fix(service): fork the listener's extensions for each accepted connec…
sgamelin Oct 7, 2026
08a9b38
build(deps): bump jsonschema from 0.45.1 to 0.58.3
dependabot[bot] Oct 7, 2026
563ffd5
fix(storage): fail broker startup when S3/GCS storage isn't usable
solace-aross Oct 4, 2026
1d54f18
docs(storage): fix inaccurate AWS credential comments, add determinis…
solace-aross Oct 4, 2026
c6b8904
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
4eb4597
fix: answer UNKNOWN_TOPIC_OR_PARTITION for a fetch of an unknown topi…
solace-aross Oct 3, 2026
bcd7a88
fix: assert topic_id on the unknown-topic-name response, fix CHANGELO…
solace-aross Oct 3, 2026
1757b7b
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
664174b
fix(storage): refuse dynostore delete_topic for an invalid topic name
solace-aross Oct 3, 2026
80967fe
fix(storage): use a bad name that actually hits the prefix hazard in …
solace-aross Oct 3, 2026
96f5467
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
c97479f
fix: reject CreateTopics replication_factor below 1 (SOL-155173)
solace-aross Oct 3, 2026
0ebb6cd
fix(storage): check CreateTopics replication factor before partition …
solace-aross Oct 6, 2026
494556c
Merge pull request #877 from nisshi-io/chore/reduce-dev-debug-info
sgamelin Oct 7, 2026
cfbbb8a
Merge pull request #829 from nisshi-io/fix/sol-155173-replication-fac…
solace-aross Oct 7, 2026
f9a3fd5
Merge pull request #884 from nisshi-io/880-listener-per-connection-ex…
sgamelin Oct 7, 2026
ed7df37
Merge pull request #868 from nisshi-io/dependabot/cargo/main/tokio-1.…
solace-aross Oct 7, 2026
9f27287
Merge pull request #872 from nisshi-io/dependabot/cargo/main/opentele…
solace-aross Oct 7, 2026
d96889b
Merge pull request #881 from nisshi-io/dependabot/cargo/main/jsonsche…
solace-aross Oct 7, 2026
fd94b01
fix(storage): honour AWS_SKIP_SIGNATURE, ping the cluster prefix, nam…
solace-aross Oct 6, 2026
d9ebe2d
Merge remote-tracking branch 'origin/main' into 875-full-version-pin-…
sgamelin Oct 7, 2026
458ec72
fix: wait beside an unknown topic name and log metadata errors in fetch
solace-aross Oct 6, 2026
e228ac3
fix(dynostore): delete an unsafe-named topic's metadata only
solace-aross Oct 6, 2026
688cd64
Merge pull request #876 from nisshi-io/875-full-version-pin-comments
sgamelin Oct 7, 2026
16c19e5
Merge pull request #844 from nisshi-io/fix/sol-155184-s3-credential-c…
solace-aross Oct 7, 2026
433c376
Merge pull request #834 from nisshi-io/fix/sol-155319-fetch-unknown-t…
solace-aross Oct 7, 2026
148800c
Merge pull request #833 from nisshi-io/fix/sol-155178-dynostore-delet…
solace-aross Oct 7, 2026
e5da75b
fix(dynostore): encode consumer group ids as a single opaque path seg…
solace-aross Oct 4, 2026
1efa379
fix(dynostore): correct EMPTY_GROUP_SENTINEL rationale, add list_grou…
solace-aross Oct 4, 2026
bcace9e
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
c5c878a
fix(dynostore): pin group key layout and cover group state per id
solace-aross Oct 6, 2026
dee198b
test: move the broker wire helpers out of tls.rs into common
solace-aross Oct 2, 2026
83953ee
fix: answer OFFSET_OUT_OF_RANGE for a fetch offset outside the partition
solace-aross Oct 2, 2026
39cb5ab
fix: drop the leader hint from the unknown topic Fetch answer
solace-aross Oct 2, 2026
957f099
docs: tidy comments to match .claude/rules/comments.md
solace-aross Oct 5, 2026
d04c721
fix: answer NONE above the high watermark and wait beside an unknown …
solace-aross Oct 6, 2026
b91c6a3
fix: keep the log start through slatedb compaction and count out-of-b…
solace-aross Oct 6, 2026
952fb62
fix: document the slatedb upgrade reset and keep the stage for empty …
solace-aross Oct 6, 2026
3a8b66e
docs: recommend auto.offset.reset=earliest across the slatedb upgrade
solace-aross Oct 7, 2026
da6d116
Merge pull request #842 from nisshi-io/fix/sol-155078-dynostore-group…
solace-aross Oct 8, 2026
c670865
Merge pull request #826 from nisshi-io/fix/sol-155090-fetch-offset-bo…
solace-aross Oct 8, 2026
5640e35
ci: stop building the Intel macOS release binary (#892)
solace-aross Oct 8, 2026
7b5e98c
ci: skip Tier B on fork pull requests (#896)
solace-aross Oct 8, 2026
315394a
ci: build each lake format once and add a turso storage leg (#895)
solace-aross Oct 8, 2026
931dbb7
fix: refuse DeleteGroups for a non-empty group (#837)
solace-aross Oct 8, 2026
ae36fbf
chore: refresh Understand-Anything graph at da6d1160 (#893)
solace-aross Oct 8, 2026
2db01a4
ci: add optional nightly Tier C workflow (#901)
solace-aross Oct 8, 2026
6c59149
docs: add naming rules for contributors and agents (#903)
solace-wkourlas Oct 8, 2026
8b4726a
Keep secrets and record data out of logs (#889)
sgamelin Oct 8, 2026
a40c794
ci: check the feature matrix instead of building it (#899)
reubenjds Oct 8, 2026
8543d06
Produce with acks=0 no longer gets an unsolicited response; failure c…
solace-aross Oct 8, 2026
5703d45
Add descriptions to nisshi-storage-* crates (#910)
shortishly Oct 9, 2026
c32355a
ci: squash-merge PRs with Conventional Commits titles, stop editing C…
sgamelin Oct 9, 2026
c0b50cd
chore: bump version to 0.7.0-pre.3 (#912)
sgamelin Oct 9, 2026
c4b48e4
Handle InitProducerId v0-2 and the KIP-360 epoch bump on every engine…
sgamelin Oct 9, 2026
34c6924
client: discard dead pooled connections and bound pool waits and resp…
sgamelin Oct 9, 2026
5e56b98
Fix address-family-unsupported detection on Windows (#894)
solace-wkourlas Oct 9, 2026
f4a7679
build(deps): bump nanoid from 0.4.0 to 0.5.0 (#916)
dependabot[bot] Oct 9, 2026
fabc42a
ci: hide the dco2 override button (#913)
reubenjds Oct 9, 2026
622f42a
build: embed the crate list in release binaries with cargo-auditable …
reubenjds Oct 9, 2026
54e96c8
fix: build on Windows by making SIGINT/SIGTERM handling conditional (…
solace-wkourlas Oct 9, 2026
feeba78
test: add a Kafka CLI smoke suite and run it in CI (#862)
solace-wkourlas Oct 9, 2026
bf4611b
test: add Kafka CLI smoke tests for the broker, topics, configs, prod…
solace-wkourlas Oct 9, 2026
1952ed9
build(deps): bump opentelemetry crates to 0.33 (#924)
solace-aross Oct 9, 2026
1f3b44e
ci: skip Rust jobs on PRs that only change CI config or docs (#925)
reubenjds Oct 9, 2026
a81b990
build(deps): bump slatedb from 0.14.1 to 0.17.0 (#870)
dependabot[bot] Oct 9, 2026
21f6502
test: add Kafka CLI smoke tests for retention, compaction, kafka-dele…
solace-wkourlas Oct 9, 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
  •  
  •  
  •  
249 changes: 249 additions & 0 deletions .claude/rules/comments.md

Large diffs are not rendered by default.

50 changes: 50 additions & 0 deletions .claude/rules/naming.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
paths:
- "**/*.rs"
- "**/*.sh"
- "**/justfile"
---

## Names

A reader should understand what a name holds or does without reading its definition. Choose the
name that a new contributor understands on first reading, even if it is longer. A long name costs
a few characters, and an unclear name makes every reader look up its definition.

The examples below are illustrative, not taken from a real file, so they stay true when the code
changes.

## Rules

- **Name what the value means, not its type or its literal value.** From `TIMEOUT`, a reader
learns what kind of value it is, but not what it limits. From `CONNECT_TIMEOUT`, a reader learns
that it limits a connection attempt.
- **Name a function for its result or its effect.** A function that returns something is named
for what it returns (`pending_requests`, `latest_offset`). A function that changes something
starts with a verb (`create_topic`, `remove_member`). Avoid a bare noun such as `topic` or
`request` for a function that creates or sends something.
- **Name a test for the behaviour it requires.** `expired_session_removes_member` states the rule
that the test checks. `test_session` or `session_case_2` does not.
- **Spell words out.** Write `partition`, `message`, `configuration`, not `p`, `msg`, `cfg`. Terms
and abbreviations that the Kafka documentation uses are fine: `acks`, `isr`, `api`.
- **Avoid generic words.** `data`, `info`, `result`, `value`, `item`, `helper`, `tmp`, `first`,
`each` say nothing about the content. Add what the thing is: `first_attempt`,
`records_per_batch`.
- **Name a type for what it is.** A type that only holds data is named for that data
(`PartitionOffsets` holds a partition's offsets). A type with behaviour is named so the
behaviour shows (`TemporaryDirectory` deletes itself when it is dropped).
- **Don't wrap a type in a new type to carry extra values.** If a function returns a
`Connection` and some data about it, return the `Connection` and a type named for the data,
such as `(Connection, Handshake)`. A name like `ConnectionWithHandshake` reads as a kind of
`Connection`, and hides that it bundles separate values.
- **Make a boolean read as a statement.** `is_empty`, `port_is_free`, `include_defaults`.
- **Use one name for one thing.** If the code already has a name for a concept, use that name
everywhere, and do not invent a synonym. Do not give two different things the same name.
- **A short name is fine only in a short scope.** A closure parameter or a loop index that is used
on the next line can be `n` or `line`. A value that lives for more than a few lines needs a full
name.

## The Test

Read the name alone, without its type and without the code around it. If you need to read the
definition to understand what it is, rename it.
42 changes: 42 additions & 0 deletions .claude/rules/smoke-tests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
paths:
- "nisshi-smoke-test/**"
---

## What a smoke test checks

The smoke suite checks that the real Kafka CLI tools work against Nisshi as a user runs them. A
tool's exit code and printed text are all that the user sees, so a smoke test reads that text. The
tools write the text for people, though. A test that reads more of it than it needs breaks when a
Kafka release changes the wording, and it checks the tool instead of the broker.

## Rules

- **Check only the facts that the test's doc comment states.** Check the exit code, and read from
the output only the values that the test is about. Leave the rest of the output alone: an empty
stdout or a whole printed line is a fact about the tool, not the broker.
- **Check what the broker controls, not what the client chooses.** The Java client's partitioner
decides which partition a key goes to, and the tool decides how to format a line. Check a fact
that holds whatever the client chose, such as the total of the partitions' offsets instead of
each partition's offset. The broker numbers the records within each partition, so check that
numbering: each partition's offsets start at 0 and have no gap or repeat.
- **Test the broker's logic in `nisshi-broker/tests/it`.** A detailed check of broker behaviour,
such as how it stores compressed batches, belongs in the integration tests, which send typed
requests and check typed responses. Keep a detailed check in the smoke suite only if no other
test can reach that behaviour, such as a process restart, several producers at once, or a topic
that is deleted and created again.
- **Make a reader check the layout that it depends on.** A reader that splits a table at
whitespace finds each column by its position. It must compare the table's heading with the
heading it expects, and panic with the output if they differ. A new Kafka release then fails
with a clear message instead of a wrong value. The reader returns `None` only if the layout
matches and the value is not in the table.
- **Name every string that a reader or a test matches in a tool's output.** Put it in a constant
at the top of that tool's module in `src/kafka_cli/`, so the module shows in one place what it
expects the tool to print. Put the names of the Kafka exceptions that the tools print in
`src/kafka_cli.rs`. Write a command-line argument as a literal where the command is built,
because the harness writes it and does not read it.
- **Give each command that has a reader its own `Output` type.** A `KafkaCli` method whose output
a reader reads returns `Output<Marker>`, where `Marker` is an empty enum named after the method,
such as `DescribeTopic` for `describe_topic`. The reader is a method of `impl Output<Marker>`.
The compiler then rejects a reader called on another command's output. A method whose output no
reader reads returns `Output`.
16 changes: 16 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "cargo fmt --all 2>/dev/null || true",
"statusMessage": "Formatting with cargo fmt..."
}
]
}
]
}
}
21 changes: 21 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# CI selects this profile with NEXTEST_PROFILE=ci; local runs keep the
# default profile. A test still running after 5 minutes is killed rather
# than holding the runner until the job times out. The slowest test,
# new_cg::pg::consumer_next_action_32c, takes about 62 s.
[profile.ci]
slow-timeout = { period = "60s", terminate-after = 5 }

# The settings of the smoke suite (nisshi-smoke-test). Each Kafka CLI call has
# its own timeout, and `slow-timeout` stops a test that hangs anywhere else.
[profile.smoke]
fail-fast = false
# Each test starts Kafka CLI JVMs, so memory limits how many tests can run.
test-threads = 4
slow-timeout = { period = "60s", terminate-after = 5 }

# S3 runs only the topic lifecycle tests, which check that a broker on S3
# stores and serves topics and records. Every other engine runs every test that
# its feature compiles.
[profile.smoke-s3]
inherits = "smoke"
default-filter = "test(/^topic_lifecycle::/) | test(=every_test_file_is_declared)"
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.

FROM rust:1.85
FROM rust:1.98@sha256:a8a5f0a1e5fe7dfe1d352591e4a1c7dd2c08fd70475cae872cf3458ba0df0546
4 changes: 2 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "tansu",
"name": "nisshi",

"dockerFile": "Dockerfile",

Expand All @@ -15,7 +15,7 @@
"3000": { "label": "grafana" },
"5432": { "label": "postgresql" },
"9090": { "label": "prom" },
"9092": { "label": "tansu" }
"9092": { "label": "nisshi" }
},

"features": {
Expand Down
10 changes: 4 additions & 6 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
/target
/work-dir
/logs
/.git
perf.data
*.log
# Allowlist: the Dockerfile only packages a prebuilt binary (see Dockerfile).
*
!dist/
!LICENSE
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# See https://docs.github.com/en/repositories/managing-your-repositories-settings-and-security/customizing-your-repository/about-code-owners

* @shortishly @sgamelin @solace-wkourlas @solace-aross
29 changes: 29 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
name: Bug report
about: Report something that isn't working as expected
title: ""
labels: bug
assignees: ""
---

**Describe the bug**
A clear description of what's wrong.

**To reproduce**
Steps to reproduce the behavior, including relevant configuration (storage
backend, feature flags, `.env` settings).

**Expected behavior**
What you expected to happen instead.

**Environment**
- Nisshi version or commit:
- Storage backend (postgres / libsql / s3 / memory / slatedb):
- OS:

**Logs**
Relevant log output, with any sensitive data (credentials, hostnames)
redacted.

**Additional context**
Anything else that's relevant.
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea or improvement
title: ""
labels: enhancement
assignees: ""
---

**What problem does this solve?**
Describe the problem or limitation you're running into.

**Describe the solution you'd like**
What you'd want to happen.

**Describe alternatives you've considered**
Any alternative solutions or workarounds you've tried.

**Additional context**
Anything else that's relevant — related issues, prior art in other Kafka
implementations, etc.
11 changes: 11 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## What changes, and why?

<!-- What a user or operator sees differently, and why. Link an issue if one exists. -->

## Upgrade impact

<!-- What an operator must do when upgrading or rolling back. "None" is fine. -->

## How was this tested?

<!-- Command(s) run, or why testing doesn't apply. -->
2 changes: 2 additions & 0 deletions .github/dco.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# CNCF dco2 App config (read from the default branch only): hide the "Set DCO to pass" override button.
allowOverrideAction: false
62 changes: 60 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,70 @@
version: 2
# Each entry sets `commit-message`, so Dependabot titles its PRs
# `build(deps): bump ...`. pr-title.yml requires a Conventional Commits
# title, and Dependabot's default `Bump ...` title fails it.
updates:
# The 7-day cooldown gives an upstream CVE or a yanked release time to
# surface before Dependabot opens a bump PR.
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
interval: "weekly"
target-branch: "main"
commit-message:
prefix: "build"
include: "scope"
cooldown:
default-days: 7
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "daily"
interval: "weekly"
target-branch: "main"
commit-message:
prefix: "build"
include: "scope"
ignore:
# Pinned to 1.1.0 in Cargo.toml: buoyant_kernel 0.22.2 depends on
# "^1", which resolves to 1.2.0 by default, but 1.2.0 renamed the
# parse_column_name macro to column_name_segments, breaking the
# version deltalake 0.32.4 actually builds against. Dependabot can't
# see that constraint and will keep proposing 1.2.x, which fails CI.
# Drop this once deltalake bumps its buoyant_kernel dependency.
- dependency-name: "buoyant_kernel_derive"
versions: [">1.1.0"]
# rsasl 2.3.1 (the latest release) requires digest 0.10 for its SCRAM
# key derivation, and sha2 0.11 depends on digest 0.11 instead, so the
# two cannot both appear as the Sha256/Sha512 types
# nisshi-storage::alter_user_scram_credentials passes into
# rsasl::mechanisms::scram::tools::derive_keys. Dependabot cannot see
# that constraint and will keep proposing 0.11.x, which fails to
# build. Drop this once rsasl ships a release built against digest
# 0.11.
- dependency-name: "sha2"
versions: [">0.10.9"]
cooldown:
default-days: 7
# The Dockerfile's alpine base and .devcontainer's rust base are pinned to
# exact digests. A digest pin only stays current if something deliberately
# bumps it, so both get the same Dependabot coverage the other ecosystems
# above already have, rather than freezing in place indefinitely.
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
target-branch: "main"
commit-message:
prefix: "build"
include: "scope"
cooldown:
default-days: 7
- package-ecosystem: "docker"
directory: "/.devcontainer"
schedule:
interval: "weekly"
target-branch: "main"
commit-message:
prefix: "build"
include: "scope"
cooldown:
default-days: 7
45 changes: 45 additions & 0 deletions .github/scripts/ci-changes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env bash
#
# Decides whether a pull request needs the Rust jobs in ci.yml,
# dependencies.yml and codeql.yml. Reads the PR's changed paths, one per
# line, on stdin and writes `rust=true` or `rust=false` to $GITHUB_OUTPUT
# (stdout when unset).
#
# `rust=false` only when every path is on the skip list below: CI config
# that none of those three workflows reads, and prose. Anything else,
# including an empty list, means `rust=true`, so an unexpected path runs
# the full suite rather than skipping it. The three workflows themselves,
# and the scripts and SQL their jobs run, are excluded from the skip list so
# a change to them is exercised by the jobs that use them.
#
# The `changes` jobs run the PR base's copy of this script, after its
# ci-changes.test.sh. workflow-lint.yml runs the PR head's test.
#
set -euo pipefail

skippable() {
case "$1" in
.github/workflows/ci.yml | .github/workflows/dependencies.yml | .github/workflows/codeql.yml) return 1 ;;
.github/workflows/scripts/* | .github/scripts/*) return 1 ;;
.github/*) return 0 ;;
docs/*.md) return 0 ;;
*/*) return 1 ;;
*.md | LICENSE | NOTICE) return 0 ;;
*) return 1 ;;
esac
}

rust=false
seen=0
while IFS= read -r path || [ -n "$path" ]; do
[ -n "$path" ] || continue
seen=$((seen + 1))
if ! skippable "$path"; then
rust=true
echo "runs Rust jobs: $path"
break
fi
done
[ "$seen" -gt 0 ] || { rust=true; echo "no changed paths listed, running everything"; }

echo "rust=$rust" >> "${GITHUB_OUTPUT:-/dev/stdout}"
Loading
Loading