From 8f94aee1fa0639b69c8b1dbcd5840d4b93153ab6 Mon Sep 17 00:00:00 2001
From: centra
Date: Tue, 9 Dec 2025 16:51:20 +0900
Subject: [PATCH] Fix R8: Convert submodule gitlinks to regular directories
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Remove gitlinks (160000 mode) for chainfire, flaredb, iam
- Add workspace contents as regular tracked files
- Update flake.nix to use simple paths instead of builtins.fetchGit
This resolves the nix build failure where submodule directories
appeared empty in the nix store.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5
---
chainfire | 1 -
chainfire/.gitignore | 22 +
chainfire/Cargo.toml | 89 +
chainfire/advice.md | 87 +
chainfire/chainfire-client/Cargo.toml | 31 +
chainfire/chainfire-client/src/client.rs | 389 ++++
chainfire/chainfire-client/src/error.rs | 34 +
chainfire/chainfire-client/src/lib.rs | 34 +
chainfire/chainfire-client/src/node.rs | 333 +++
chainfire/chainfire-client/src/watch.rs | 143 ++
chainfire/crates/chainfire-api/Cargo.toml | 42 +
chainfire/crates/chainfire-api/build.rs | 19 +
.../chainfire-api/src/cluster_service.rs | 216 ++
.../crates/chainfire-api/src/conversions.rs | 113 +
.../src/generated/chainfire.internal.rs | 566 +++++
.../src/generated/chainfire.v1.rs | 1817 ++++++++++++++++
.../crates/chainfire-api/src/generated/mod.rs | 13 +
.../chainfire-api/src/internal_service.rs | 242 +++
.../crates/chainfire-api/src/kv_service.rs | 285 +++
.../crates/chainfire-api/src/lease_service.rs | 194 ++
chainfire/crates/chainfire-api/src/lib.rs | 29 +
.../crates/chainfire-api/src/raft_client.rs | 428 ++++
.../crates/chainfire-api/src/watch_service.rs | 157 ++
chainfire/crates/chainfire-core/Cargo.toml | 37 +
.../crates/chainfire-core/src/builder.rs | 221 ++
.../crates/chainfire-core/src/callbacks.rs | 103 +
.../crates/chainfire-core/src/cluster.rs | 282 +++
chainfire/crates/chainfire-core/src/config.rs | 162 ++
chainfire/crates/chainfire-core/src/error.rs | 78 +
chainfire/crates/chainfire-core/src/events.rs | 198 ++
chainfire/crates/chainfire-core/src/kvs.rs | 290 +++
chainfire/crates/chainfire-core/src/lib.rs | 58 +
chainfire/crates/chainfire-gossip/Cargo.toml | 35 +
.../crates/chainfire-gossip/src/agent.rs | 214 ++
.../crates/chainfire-gossip/src/broadcast.rs | 210 ++
.../crates/chainfire-gossip/src/identity.rs | 147 ++
chainfire/crates/chainfire-gossip/src/lib.rs | 40 +
.../crates/chainfire-gossip/src/membership.rs | 141 ++
.../crates/chainfire-gossip/src/runtime.rs | 131 ++
chainfire/crates/chainfire-proto/Cargo.toml | 21 +
chainfire/crates/chainfire-proto/build.rs | 12 +
chainfire/crates/chainfire-proto/src/lib.rs | 7 +
chainfire/crates/chainfire-raft/Cargo.toml | 38 +
chainfire/crates/chainfire-raft/src/config.rs | 79 +
chainfire/crates/chainfire-raft/src/lib.rs | 20 +
.../crates/chainfire-raft/src/network.rs | 316 +++
chainfire/crates/chainfire-raft/src/node.rs | 326 +++
.../crates/chainfire-raft/src/storage.rs | 475 ++++
chainfire/crates/chainfire-server/Cargo.toml | 59 +
.../crates/chainfire-server/src/config.rs | 160 ++
chainfire/crates/chainfire-server/src/lib.rs | 10 +
chainfire/crates/chainfire-server/src/main.rs | 148 ++
chainfire/crates/chainfire-server/src/node.rs | 201 ++
.../crates/chainfire-server/src/server.rs | 207 ++
.../tests/integration_test.rs | 159 ++
chainfire/crates/chainfire-storage/Cargo.toml | 34 +
.../crates/chainfire-storage/src/kv_store.rs | 435 ++++
.../chainfire-storage/src/lease_store.rs | 280 +++
chainfire/crates/chainfire-storage/src/lib.rs | 51 +
.../chainfire-storage/src/log_storage.rs | 478 ++++
.../crates/chainfire-storage/src/snapshot.rs | 316 +++
.../chainfire-storage/src/state_machine.rs | 587 +++++
.../crates/chainfire-storage/src/store.rs | 132 ++
chainfire/crates/chainfire-types/Cargo.toml | 18 +
.../crates/chainfire-types/src/command.rs | 270 +++
chainfire/crates/chainfire-types/src/error.rs | 164 ++
chainfire/crates/chainfire-types/src/kv.rs | 201 ++
chainfire/crates/chainfire-types/src/lease.rs | 187 ++
chainfire/crates/chainfire-types/src/lib.rs | 23 +
chainfire/crates/chainfire-types/src/node.rs | 255 +++
chainfire/crates/chainfire-types/src/watch.rs | 266 +++
chainfire/crates/chainfire-watch/Cargo.toml | 26 +
chainfire/crates/chainfire-watch/src/lib.rs | 25 +
.../crates/chainfire-watch/src/matcher.rs | 150 ++
.../crates/chainfire-watch/src/registry.rs | 353 +++
.../crates/chainfire-watch/src/stream.rs | 190 ++
chainfire/flake.lock | 96 +
chainfire/flake.nix | 79 +
chainfire/proto/chainfire.proto | 414 ++++
chainfire/proto/internal.proto | 93 +
flake.nix | 20 +-
flaredb | 1 -
flaredb/.gitignore | 18 +
flaredb/.specify/memory/constitution.md | 41 +
.../scripts/bash/check-prerequisites.sh | 166 ++
flaredb/.specify/scripts/bash/common.sh | 156 ++
.../scripts/bash/create-new-feature.sh | 305 +++
flaredb/.specify/scripts/bash/setup-plan.sh | 61 +
.../scripts/bash/update-agent-context.sh | 790 +++++++
.../.specify/templates/agent-file-template.md | 28 +
.../.specify/templates/checklist-template.md | 40 +
flaredb/.specify/templates/plan-template.md | 104 +
flaredb/.specify/templates/spec-template.md | 115 +
flaredb/.specify/templates/tasks-template.md | 251 +++
flaredb/Cargo.toml | 66 +
flaredb/advice.md | 124 ++
flaredb/chat.md | 1935 +++++++++++++++++
flaredb/crates/flaredb-cli/Cargo.toml | 9 +
flaredb/crates/flaredb-cli/src/main.rs | 3 +
flaredb/crates/flaredb-client/Cargo.toml | 14 +
flaredb/crates/flaredb-client/src/client.rs | 264 +++
flaredb/crates/flaredb-client/src/lib.rs | 4 +
flaredb/crates/flaredb-client/src/main.rs | 91 +
.../crates/flaredb-client/src/region_cache.rs | 48 +
.../flaredb-client/tests/test_rpc_connect.rs | 297 +++
flaredb/crates/flaredb-pd/Cargo.toml | 11 +
flaredb/crates/flaredb-pd/src/cluster.rs | 136 ++
flaredb/crates/flaredb-pd/src/main.rs | 40 +
flaredb/crates/flaredb-pd/src/pd_service.rs | 78 +
flaredb/crates/flaredb-pd/src/service.rs | 31 +
flaredb/crates/flaredb-pd/src/tso.rs | 332 +++
flaredb/crates/flaredb-proto/Cargo.toml | 12 +
flaredb/crates/flaredb-proto/build.rs | 18 +
.../crates/flaredb-proto/src/chainfire.proto | 319 +++
flaredb/crates/flaredb-proto/src/kvrpc.proto | 123 ++
flaredb/crates/flaredb-proto/src/lib.rs | 16 +
flaredb/crates/flaredb-proto/src/pdpb.proto | 78 +
.../flaredb-proto/src/raft_server.proto | 127 ++
flaredb/crates/flaredb-raft/Cargo.toml | 19 +
flaredb/crates/flaredb-raft/src/lib.rs | 15 +
flaredb/crates/flaredb-raft/src/network.rs | 338 +++
.../flaredb-raft/src/persistent_storage.rs | 611 ++++++
flaredb/crates/flaredb-raft/src/raft_node.rs | 517 +++++
flaredb/crates/flaredb-raft/src/storage.rs | 809 +++++++
flaredb/crates/flaredb-raft/src/types.rs | 155 ++
flaredb/crates/flaredb-server/Cargo.toml | 32 +
.../flaredb-server/examples/test_cluster.rs | 69 +
.../crates/flaredb-server/src/config/mod.rs | 279 +++
.../crates/flaredb-server/src/heartbeat.rs | 47 +
flaredb/crates/flaredb-server/src/lib.rs | 7 +
flaredb/crates/flaredb-server/src/main.rs | 320 +++
flaredb/crates/flaredb-server/src/merkle.rs | 113 +
.../crates/flaredb-server/src/pd_client.rs | 503 +++++
.../crates/flaredb-server/src/raft_service.rs | 257 +++
flaredb/crates/flaredb-server/src/service.rs | 520 +++++
flaredb/crates/flaredb-server/src/store.rs | 254 +++
.../flaredb-server/tests/test_consistency.rs | 198 ++
.../flaredb-server/tests/test_multi_region.rs | 122 ++
.../crates/flaredb-server/tests/test_split.rs | 71 +
.../tests/test_split_trigger.rs | 46 +
.../flaredb-server/tests/test_strong_mode.rs | 69 +
flaredb/crates/flaredb-storage/Cargo.toml | 13 +
flaredb/crates/flaredb-storage/src/engine.rs | 66 +
flaredb/crates/flaredb-storage/src/lib.rs | 51 +
.../flaredb-storage/src/rocks_engine.rs | 389 ++++
flaredb/crates/flaredb-types/Cargo.toml | 9 +
flaredb/crates/flaredb-types/src/command.rs | 35 +
flaredb/crates/flaredb-types/src/error.rs | 34 +
flaredb/crates/flaredb-types/src/lib.rs | 11 +
flaredb/crates/flaredb-types/src/region.rs | 32 +
flaredb/data/CURRENT | 1 +
flaredb/data/IDENTITY | 1 +
flaredb/data/LOCK | 0
flaredb/data/LOG | 587 +++++
flaredb/data/MANIFEST-000005 | Bin 0 -> 170 bytes
flaredb/data/OPTIONS-000007 | 333 +++
flaredb/flake.lock | 96 +
flaredb/flake.nix | 48 +
flaredb/rustfmt.toml | 1 +
flaredb/scripts/verify-core.sh | 52 +
flaredb/scripts/verify-multiraft.sh | 14 +
flaredb/scripts/verify-raft.sh | 12 +
flaredb/scripts/verify-sharding.sh | 40 +
.../checklists/requirements.md | 34 +
.../contracts/kvrpc.proto | 55 +
.../001-distributed-core/contracts/pdpb.proto | 56 +
.../specs/001-distributed-core/data-model.md | 52 +
flaredb/specs/001-distributed-core/plan.md | 95 +
.../specs/001-distributed-core/quickstart.md | 64 +
.../specs/001-distributed-core/research.md | 19 +
flaredb/specs/001-distributed-core/spec.md | 87 +
flaredb/specs/001-distributed-core/tasks.md | 220 ++
flaredb/specs/001-multi-raft/spec.md | 115 +
.../checklists/requirements.md | 34 +
.../contracts/raft-service.md | 35 +
flaredb/specs/002-raft-features/data-model.md | 34 +
flaredb/specs/002-raft-features/plan.md | 69 +
flaredb/specs/002-raft-features/quickstart.md | 39 +
flaredb/specs/002-raft-features/research.md | 23 +
flaredb/specs/002-raft-features/spec.md | 92 +
flaredb/specs/002-raft-features/tasks.md | 128 ++
.../checklists/requirements.md | 34 +
.../003-kvs-consistency/contracts/kv_cas.md | 29 +
.../003-kvs-consistency/contracts/kv_raw.md | 25 +
.../contracts/raft_service.md | 33 +
.../specs/003-kvs-consistency/data-model.md | 26 +
flaredb/specs/003-kvs-consistency/plan.md | 76 +
.../specs/003-kvs-consistency/quickstart.md | 78 +
flaredb/specs/003-kvs-consistency/research.md | 15 +
flaredb/specs/003-kvs-consistency/spec.md | 88 +
flaredb/specs/003-kvs-consistency/tasks.md | 119 +
.../004-multi-raft/checklists/requirements.md | 34 +
flaredb/specs/004-multi-raft/contracts/pd.md | 36 +
flaredb/specs/004-multi-raft/data-model.md | 45 +
flaredb/specs/004-multi-raft/plan.md | 62 +
flaredb/specs/004-multi-raft/quickstart.md | 44 +
flaredb/specs/004-multi-raft/spec.md | 208 ++
flaredb/specs/004-multi-raft/tasks.md | 125 ++
iam | 1 -
iam/Cargo.toml | 97 +
iam/config/iam.example.toml | 48 +
iam/crates/iam-api/Cargo.toml | 30 +
iam/crates/iam-api/build.rs | 11 +
iam/crates/iam-api/src/conversions.rs | 412 ++++
iam/crates/iam-api/src/generated/mod.rs | 10 +
iam/crates/iam-api/src/iam_service.rs | 918 ++++++++
iam/crates/iam-api/src/lib.rs | 19 +
iam/crates/iam-api/src/token_service.rs | 430 ++++
.../iam-api/tests/tenant_path_integration.rs | 778 +++++++
iam/crates/iam-audit/Cargo.toml | 33 +
iam/crates/iam-audit/src/event.rs | 467 ++++
iam/crates/iam-audit/src/lib.rs | 32 +
iam/crates/iam-audit/src/logger.rs | 281 +++
iam/crates/iam-audit/src/sink.rs | 305 +++
iam/crates/iam-authn/Cargo.toml | 24 +
iam/crates/iam-authn/src/jwt.rs | 409 ++++
iam/crates/iam-authn/src/lib.rs | 22 +
iam/crates/iam-authn/src/mtls.rs | 353 +++
iam/crates/iam-authn/src/provider.rs | 245 +++
iam/crates/iam-authn/src/token.rs | 856 ++++++++
iam/crates/iam-authz/Cargo.toml | 22 +
iam/crates/iam-authz/src/cache.rs | 490 +++++
iam/crates/iam-authz/src/condition.rs | 349 +++
iam/crates/iam-authz/src/context.rs | 222 ++
iam/crates/iam-authz/src/evaluator.rs | 550 +++++
iam/crates/iam-authz/src/lib.rs | 18 +
iam/crates/iam-client/Cargo.toml | 20 +
iam/crates/iam-client/src/client.rs | 510 +++++
iam/crates/iam-client/src/lib.rs | 7 +
iam/crates/iam-server/Cargo.toml | 32 +
iam/crates/iam-server/src/config.rs | 347 +++
iam/crates/iam-server/src/main.rs | 257 +++
iam/crates/iam-store/Cargo.toml | 22 +
iam/crates/iam-store/src/backend.rs | 1047 +++++++++
iam/crates/iam-store/src/binding_store.rs | 458 ++++
iam/crates/iam-store/src/group_store.rs | 221 ++
iam/crates/iam-store/src/lib.rs | 20 +
iam/crates/iam-store/src/principal_store.rs | 403 ++++
iam/crates/iam-store/src/role_store.rs | 388 ++++
iam/crates/iam-store/src/token_store.rs | 77 +
iam/crates/iam-types/Cargo.toml | 20 +
iam/crates/iam-types/src/condition.rs | 582 +++++
iam/crates/iam-types/src/error.rs | 159 ++
iam/crates/iam-types/src/lib.rs | 30 +
iam/crates/iam-types/src/policy.rs | 318 +++
iam/crates/iam-types/src/principal.rs | 235 ++
iam/crates/iam-types/src/resource.rs | 214 ++
iam/crates/iam-types/src/role.rs | 310 +++
iam/crates/iam-types/src/scope.rs | 494 +++++
iam/crates/iam-types/src/token.rs | 506 +++++
iam/flake.lock | 96 +
iam/flake.nix | 43 +
iam/proto/iam.proto | 622 ++++++
253 files changed, 45639 insertions(+), 19 deletions(-)
delete mode 160000 chainfire
create mode 100644 chainfire/.gitignore
create mode 100644 chainfire/Cargo.toml
create mode 100644 chainfire/advice.md
create mode 100644 chainfire/chainfire-client/Cargo.toml
create mode 100644 chainfire/chainfire-client/src/client.rs
create mode 100644 chainfire/chainfire-client/src/error.rs
create mode 100644 chainfire/chainfire-client/src/lib.rs
create mode 100644 chainfire/chainfire-client/src/node.rs
create mode 100644 chainfire/chainfire-client/src/watch.rs
create mode 100644 chainfire/crates/chainfire-api/Cargo.toml
create mode 100644 chainfire/crates/chainfire-api/build.rs
create mode 100644 chainfire/crates/chainfire-api/src/cluster_service.rs
create mode 100644 chainfire/crates/chainfire-api/src/conversions.rs
create mode 100644 chainfire/crates/chainfire-api/src/generated/chainfire.internal.rs
create mode 100644 chainfire/crates/chainfire-api/src/generated/chainfire.v1.rs
create mode 100644 chainfire/crates/chainfire-api/src/generated/mod.rs
create mode 100644 chainfire/crates/chainfire-api/src/internal_service.rs
create mode 100644 chainfire/crates/chainfire-api/src/kv_service.rs
create mode 100644 chainfire/crates/chainfire-api/src/lease_service.rs
create mode 100644 chainfire/crates/chainfire-api/src/lib.rs
create mode 100644 chainfire/crates/chainfire-api/src/raft_client.rs
create mode 100644 chainfire/crates/chainfire-api/src/watch_service.rs
create mode 100644 chainfire/crates/chainfire-core/Cargo.toml
create mode 100644 chainfire/crates/chainfire-core/src/builder.rs
create mode 100644 chainfire/crates/chainfire-core/src/callbacks.rs
create mode 100644 chainfire/crates/chainfire-core/src/cluster.rs
create mode 100644 chainfire/crates/chainfire-core/src/config.rs
create mode 100644 chainfire/crates/chainfire-core/src/error.rs
create mode 100644 chainfire/crates/chainfire-core/src/events.rs
create mode 100644 chainfire/crates/chainfire-core/src/kvs.rs
create mode 100644 chainfire/crates/chainfire-core/src/lib.rs
create mode 100644 chainfire/crates/chainfire-gossip/Cargo.toml
create mode 100644 chainfire/crates/chainfire-gossip/src/agent.rs
create mode 100644 chainfire/crates/chainfire-gossip/src/broadcast.rs
create mode 100644 chainfire/crates/chainfire-gossip/src/identity.rs
create mode 100644 chainfire/crates/chainfire-gossip/src/lib.rs
create mode 100644 chainfire/crates/chainfire-gossip/src/membership.rs
create mode 100644 chainfire/crates/chainfire-gossip/src/runtime.rs
create mode 100644 chainfire/crates/chainfire-proto/Cargo.toml
create mode 100644 chainfire/crates/chainfire-proto/build.rs
create mode 100644 chainfire/crates/chainfire-proto/src/lib.rs
create mode 100644 chainfire/crates/chainfire-raft/Cargo.toml
create mode 100644 chainfire/crates/chainfire-raft/src/config.rs
create mode 100644 chainfire/crates/chainfire-raft/src/lib.rs
create mode 100644 chainfire/crates/chainfire-raft/src/network.rs
create mode 100644 chainfire/crates/chainfire-raft/src/node.rs
create mode 100644 chainfire/crates/chainfire-raft/src/storage.rs
create mode 100644 chainfire/crates/chainfire-server/Cargo.toml
create mode 100644 chainfire/crates/chainfire-server/src/config.rs
create mode 100644 chainfire/crates/chainfire-server/src/lib.rs
create mode 100644 chainfire/crates/chainfire-server/src/main.rs
create mode 100644 chainfire/crates/chainfire-server/src/node.rs
create mode 100644 chainfire/crates/chainfire-server/src/server.rs
create mode 100644 chainfire/crates/chainfire-server/tests/integration_test.rs
create mode 100644 chainfire/crates/chainfire-storage/Cargo.toml
create mode 100644 chainfire/crates/chainfire-storage/src/kv_store.rs
create mode 100644 chainfire/crates/chainfire-storage/src/lease_store.rs
create mode 100644 chainfire/crates/chainfire-storage/src/lib.rs
create mode 100644 chainfire/crates/chainfire-storage/src/log_storage.rs
create mode 100644 chainfire/crates/chainfire-storage/src/snapshot.rs
create mode 100644 chainfire/crates/chainfire-storage/src/state_machine.rs
create mode 100644 chainfire/crates/chainfire-storage/src/store.rs
create mode 100644 chainfire/crates/chainfire-types/Cargo.toml
create mode 100644 chainfire/crates/chainfire-types/src/command.rs
create mode 100644 chainfire/crates/chainfire-types/src/error.rs
create mode 100644 chainfire/crates/chainfire-types/src/kv.rs
create mode 100644 chainfire/crates/chainfire-types/src/lease.rs
create mode 100644 chainfire/crates/chainfire-types/src/lib.rs
create mode 100644 chainfire/crates/chainfire-types/src/node.rs
create mode 100644 chainfire/crates/chainfire-types/src/watch.rs
create mode 100644 chainfire/crates/chainfire-watch/Cargo.toml
create mode 100644 chainfire/crates/chainfire-watch/src/lib.rs
create mode 100644 chainfire/crates/chainfire-watch/src/matcher.rs
create mode 100644 chainfire/crates/chainfire-watch/src/registry.rs
create mode 100644 chainfire/crates/chainfire-watch/src/stream.rs
create mode 100644 chainfire/flake.lock
create mode 100644 chainfire/flake.nix
create mode 100644 chainfire/proto/chainfire.proto
create mode 100644 chainfire/proto/internal.proto
delete mode 160000 flaredb
create mode 100644 flaredb/.gitignore
create mode 100644 flaredb/.specify/memory/constitution.md
create mode 100755 flaredb/.specify/scripts/bash/check-prerequisites.sh
create mode 100755 flaredb/.specify/scripts/bash/common.sh
create mode 100755 flaredb/.specify/scripts/bash/create-new-feature.sh
create mode 100755 flaredb/.specify/scripts/bash/setup-plan.sh
create mode 100755 flaredb/.specify/scripts/bash/update-agent-context.sh
create mode 100644 flaredb/.specify/templates/agent-file-template.md
create mode 100644 flaredb/.specify/templates/checklist-template.md
create mode 100644 flaredb/.specify/templates/plan-template.md
create mode 100644 flaredb/.specify/templates/spec-template.md
create mode 100644 flaredb/.specify/templates/tasks-template.md
create mode 100644 flaredb/Cargo.toml
create mode 100644 flaredb/advice.md
create mode 100644 flaredb/chat.md
create mode 100644 flaredb/crates/flaredb-cli/Cargo.toml
create mode 100644 flaredb/crates/flaredb-cli/src/main.rs
create mode 100644 flaredb/crates/flaredb-client/Cargo.toml
create mode 100644 flaredb/crates/flaredb-client/src/client.rs
create mode 100644 flaredb/crates/flaredb-client/src/lib.rs
create mode 100644 flaredb/crates/flaredb-client/src/main.rs
create mode 100644 flaredb/crates/flaredb-client/src/region_cache.rs
create mode 100644 flaredb/crates/flaredb-client/tests/test_rpc_connect.rs
create mode 100644 flaredb/crates/flaredb-pd/Cargo.toml
create mode 100644 flaredb/crates/flaredb-pd/src/cluster.rs
create mode 100644 flaredb/crates/flaredb-pd/src/main.rs
create mode 100644 flaredb/crates/flaredb-pd/src/pd_service.rs
create mode 100644 flaredb/crates/flaredb-pd/src/service.rs
create mode 100644 flaredb/crates/flaredb-pd/src/tso.rs
create mode 100644 flaredb/crates/flaredb-proto/Cargo.toml
create mode 100644 flaredb/crates/flaredb-proto/build.rs
create mode 100644 flaredb/crates/flaredb-proto/src/chainfire.proto
create mode 100644 flaredb/crates/flaredb-proto/src/kvrpc.proto
create mode 100644 flaredb/crates/flaredb-proto/src/lib.rs
create mode 100644 flaredb/crates/flaredb-proto/src/pdpb.proto
create mode 100644 flaredb/crates/flaredb-proto/src/raft_server.proto
create mode 100644 flaredb/crates/flaredb-raft/Cargo.toml
create mode 100644 flaredb/crates/flaredb-raft/src/lib.rs
create mode 100644 flaredb/crates/flaredb-raft/src/network.rs
create mode 100644 flaredb/crates/flaredb-raft/src/persistent_storage.rs
create mode 100644 flaredb/crates/flaredb-raft/src/raft_node.rs
create mode 100644 flaredb/crates/flaredb-raft/src/storage.rs
create mode 100644 flaredb/crates/flaredb-raft/src/types.rs
create mode 100644 flaredb/crates/flaredb-server/Cargo.toml
create mode 100644 flaredb/crates/flaredb-server/examples/test_cluster.rs
create mode 100644 flaredb/crates/flaredb-server/src/config/mod.rs
create mode 100644 flaredb/crates/flaredb-server/src/heartbeat.rs
create mode 100644 flaredb/crates/flaredb-server/src/lib.rs
create mode 100644 flaredb/crates/flaredb-server/src/main.rs
create mode 100644 flaredb/crates/flaredb-server/src/merkle.rs
create mode 100644 flaredb/crates/flaredb-server/src/pd_client.rs
create mode 100644 flaredb/crates/flaredb-server/src/raft_service.rs
create mode 100644 flaredb/crates/flaredb-server/src/service.rs
create mode 100644 flaredb/crates/flaredb-server/src/store.rs
create mode 100644 flaredb/crates/flaredb-server/tests/test_consistency.rs
create mode 100644 flaredb/crates/flaredb-server/tests/test_multi_region.rs
create mode 100644 flaredb/crates/flaredb-server/tests/test_split.rs
create mode 100644 flaredb/crates/flaredb-server/tests/test_split_trigger.rs
create mode 100644 flaredb/crates/flaredb-server/tests/test_strong_mode.rs
create mode 100644 flaredb/crates/flaredb-storage/Cargo.toml
create mode 100644 flaredb/crates/flaredb-storage/src/engine.rs
create mode 100644 flaredb/crates/flaredb-storage/src/lib.rs
create mode 100644 flaredb/crates/flaredb-storage/src/rocks_engine.rs
create mode 100644 flaredb/crates/flaredb-types/Cargo.toml
create mode 100644 flaredb/crates/flaredb-types/src/command.rs
create mode 100644 flaredb/crates/flaredb-types/src/error.rs
create mode 100644 flaredb/crates/flaredb-types/src/lib.rs
create mode 100644 flaredb/crates/flaredb-types/src/region.rs
create mode 100644 flaredb/data/CURRENT
create mode 100644 flaredb/data/IDENTITY
create mode 100644 flaredb/data/LOCK
create mode 100644 flaredb/data/LOG
create mode 100644 flaredb/data/MANIFEST-000005
create mode 100644 flaredb/data/OPTIONS-000007
create mode 100644 flaredb/flake.lock
create mode 100644 flaredb/flake.nix
create mode 100644 flaredb/rustfmt.toml
create mode 100755 flaredb/scripts/verify-core.sh
create mode 100644 flaredb/scripts/verify-multiraft.sh
create mode 100755 flaredb/scripts/verify-raft.sh
create mode 100755 flaredb/scripts/verify-sharding.sh
create mode 100644 flaredb/specs/001-distributed-core/checklists/requirements.md
create mode 100644 flaredb/specs/001-distributed-core/contracts/kvrpc.proto
create mode 100644 flaredb/specs/001-distributed-core/contracts/pdpb.proto
create mode 100644 flaredb/specs/001-distributed-core/data-model.md
create mode 100644 flaredb/specs/001-distributed-core/plan.md
create mode 100644 flaredb/specs/001-distributed-core/quickstart.md
create mode 100644 flaredb/specs/001-distributed-core/research.md
create mode 100644 flaredb/specs/001-distributed-core/spec.md
create mode 100644 flaredb/specs/001-distributed-core/tasks.md
create mode 100644 flaredb/specs/001-multi-raft/spec.md
create mode 100644 flaredb/specs/002-raft-features/checklists/requirements.md
create mode 100644 flaredb/specs/002-raft-features/contracts/raft-service.md
create mode 100644 flaredb/specs/002-raft-features/data-model.md
create mode 100644 flaredb/specs/002-raft-features/plan.md
create mode 100644 flaredb/specs/002-raft-features/quickstart.md
create mode 100644 flaredb/specs/002-raft-features/research.md
create mode 100644 flaredb/specs/002-raft-features/spec.md
create mode 100644 flaredb/specs/002-raft-features/tasks.md
create mode 100644 flaredb/specs/003-kvs-consistency/checklists/requirements.md
create mode 100644 flaredb/specs/003-kvs-consistency/contracts/kv_cas.md
create mode 100644 flaredb/specs/003-kvs-consistency/contracts/kv_raw.md
create mode 100644 flaredb/specs/003-kvs-consistency/contracts/raft_service.md
create mode 100644 flaredb/specs/003-kvs-consistency/data-model.md
create mode 100644 flaredb/specs/003-kvs-consistency/plan.md
create mode 100644 flaredb/specs/003-kvs-consistency/quickstart.md
create mode 100644 flaredb/specs/003-kvs-consistency/research.md
create mode 100644 flaredb/specs/003-kvs-consistency/spec.md
create mode 100644 flaredb/specs/003-kvs-consistency/tasks.md
create mode 100644 flaredb/specs/004-multi-raft/checklists/requirements.md
create mode 100644 flaredb/specs/004-multi-raft/contracts/pd.md
create mode 100644 flaredb/specs/004-multi-raft/data-model.md
create mode 100644 flaredb/specs/004-multi-raft/plan.md
create mode 100644 flaredb/specs/004-multi-raft/quickstart.md
create mode 100644 flaredb/specs/004-multi-raft/spec.md
create mode 100644 flaredb/specs/004-multi-raft/tasks.md
delete mode 160000 iam
create mode 100644 iam/Cargo.toml
create mode 100644 iam/config/iam.example.toml
create mode 100644 iam/crates/iam-api/Cargo.toml
create mode 100644 iam/crates/iam-api/build.rs
create mode 100644 iam/crates/iam-api/src/conversions.rs
create mode 100644 iam/crates/iam-api/src/generated/mod.rs
create mode 100644 iam/crates/iam-api/src/iam_service.rs
create mode 100644 iam/crates/iam-api/src/lib.rs
create mode 100644 iam/crates/iam-api/src/token_service.rs
create mode 100644 iam/crates/iam-api/tests/tenant_path_integration.rs
create mode 100644 iam/crates/iam-audit/Cargo.toml
create mode 100644 iam/crates/iam-audit/src/event.rs
create mode 100644 iam/crates/iam-audit/src/lib.rs
create mode 100644 iam/crates/iam-audit/src/logger.rs
create mode 100644 iam/crates/iam-audit/src/sink.rs
create mode 100644 iam/crates/iam-authn/Cargo.toml
create mode 100644 iam/crates/iam-authn/src/jwt.rs
create mode 100644 iam/crates/iam-authn/src/lib.rs
create mode 100644 iam/crates/iam-authn/src/mtls.rs
create mode 100644 iam/crates/iam-authn/src/provider.rs
create mode 100644 iam/crates/iam-authn/src/token.rs
create mode 100644 iam/crates/iam-authz/Cargo.toml
create mode 100644 iam/crates/iam-authz/src/cache.rs
create mode 100644 iam/crates/iam-authz/src/condition.rs
create mode 100644 iam/crates/iam-authz/src/context.rs
create mode 100644 iam/crates/iam-authz/src/evaluator.rs
create mode 100644 iam/crates/iam-authz/src/lib.rs
create mode 100644 iam/crates/iam-client/Cargo.toml
create mode 100644 iam/crates/iam-client/src/client.rs
create mode 100644 iam/crates/iam-client/src/lib.rs
create mode 100644 iam/crates/iam-server/Cargo.toml
create mode 100644 iam/crates/iam-server/src/config.rs
create mode 100644 iam/crates/iam-server/src/main.rs
create mode 100644 iam/crates/iam-store/Cargo.toml
create mode 100644 iam/crates/iam-store/src/backend.rs
create mode 100644 iam/crates/iam-store/src/binding_store.rs
create mode 100644 iam/crates/iam-store/src/group_store.rs
create mode 100644 iam/crates/iam-store/src/lib.rs
create mode 100644 iam/crates/iam-store/src/principal_store.rs
create mode 100644 iam/crates/iam-store/src/role_store.rs
create mode 100644 iam/crates/iam-store/src/token_store.rs
create mode 100644 iam/crates/iam-types/Cargo.toml
create mode 100644 iam/crates/iam-types/src/condition.rs
create mode 100644 iam/crates/iam-types/src/error.rs
create mode 100644 iam/crates/iam-types/src/lib.rs
create mode 100644 iam/crates/iam-types/src/policy.rs
create mode 100644 iam/crates/iam-types/src/principal.rs
create mode 100644 iam/crates/iam-types/src/resource.rs
create mode 100644 iam/crates/iam-types/src/role.rs
create mode 100644 iam/crates/iam-types/src/scope.rs
create mode 100644 iam/crates/iam-types/src/token.rs
create mode 100644 iam/flake.lock
create mode 100644 iam/flake.nix
create mode 100644 iam/proto/iam.proto
diff --git a/chainfire b/chainfire
deleted file mode 160000
index 0d970d8..0000000
--- a/chainfire
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0d970d80331e2a0d74a6c806f3576095bd083923
diff --git a/chainfire/.gitignore b/chainfire/.gitignore
new file mode 100644
index 0000000..9391cf5
--- /dev/null
+++ b/chainfire/.gitignore
@@ -0,0 +1,22 @@
+# Generated files
+/target/
+**/*.rs.bk
+Cargo.lock
+
+# IDE
+.idea/
+.vscode/
+*.swp
+*.swo
+
+# OS
+.DS_Store
+Thumbs.db
+
+# Test data
+/tmp/
+*.db/
+
+# Environment
+.env
+.env.local
diff --git a/chainfire/Cargo.toml b/chainfire/Cargo.toml
new file mode 100644
index 0000000..3647999
--- /dev/null
+++ b/chainfire/Cargo.toml
@@ -0,0 +1,89 @@
+[workspace]
+resolver = "2"
+members = [
+ "crates/chainfire-proto",
+ "crates/chainfire-types",
+ "crates/chainfire-storage",
+ "crates/chainfire-raft",
+ "crates/chainfire-gossip",
+ "crates/chainfire-watch",
+ "crates/chainfire-api",
+ "crates/chainfire-core",
+ "crates/chainfire-server",
+ "chainfire-client",
+]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "MIT OR Apache-2.0"
+rust-version = "1.75"
+authors = ["Chainfire Contributors"]
+repository = "https://github.com/chainfire/chainfire"
+
+[workspace.dependencies]
+# Internal crates
+chainfire-types = { path = "crates/chainfire-types" }
+chainfire-storage = { path = "crates/chainfire-storage" }
+chainfire-raft = { path = "crates/chainfire-raft" }
+chainfire-gossip = { path = "crates/chainfire-gossip" }
+chainfire-watch = { path = "crates/chainfire-watch" }
+chainfire-api = { path = "crates/chainfire-api" }
+chainfire-client = { path = "chainfire-client" }
+chainfire-core = { path = "crates/chainfire-core" }
+chainfire-server = { path = "crates/chainfire-server" }
+chainfire-proto = { path = "crates/chainfire-proto" }
+
+# Async runtime
+tokio = { version = "1.40", features = ["full"] }
+tokio-stream = "0.1"
+futures = "0.3"
+async-trait = "0.1"
+
+# Raft
+openraft = { version = "0.9", features = ["serde", "storage-v2"] }
+
+# Gossip (SWIM protocol)
+foca = { version = "1.0", features = ["std", "tracing", "serde", "postcard-codec"] }
+
+# Storage
+rocksdb = { version = "0.24", default-features = false, features = ["multi-threaded-cf", "zstd", "lz4", "snappy"] }
+
+# gRPC
+tonic = "0.12"
+tonic-build = "0.12"
+tonic-health = "0.12"
+prost = "0.13"
+prost-types = "0.13"
+
+# Serialization
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+bincode = "1.3"
+
+# Utilities
+thiserror = "1.0"
+anyhow = "1.0"
+tracing = "0.1"
+tracing-subscriber = { version = "0.3", features = ["env-filter"] }
+bytes = "1.5"
+parking_lot = "0.12"
+dashmap = "6"
+
+# Metrics
+metrics = "0.23"
+metrics-exporter-prometheus = "0.15"
+
+# Configuration
+toml = "0.8"
+clap = { version = "4", features = ["derive"] }
+
+# Testing
+tempfile = "3.10"
+proptest = "1.4"
+
+[workspace.lints.rust]
+unsafe_code = "deny"
+
+[workspace.lints.clippy]
+all = "warn"
diff --git a/chainfire/advice.md b/chainfire/advice.md
new file mode 100644
index 0000000..7517167
--- /dev/null
+++ b/chainfire/advice.md
@@ -0,0 +1,87 @@
+RaftとGossipプロトコルを用いた、クラスター管理のための数万台までスケールするKey-Value Storeを書いてほしいです。
+
+- プログラミング言語:rust
+- テストをちゃんと書きながら書くことを推奨する。
+- クラスターへの参加/削除/障害検知を行う。
+
+では、**「Raft(合意形成)」と「Gossip(情報の拡散)」を組み合わせた場合、具体的にどうデータが流れ、どうやってノードが動き出すのか**、その具体的なフローを解説します。
+
+-----
+
+### 前提:このシステムの役割分担
+
+ * **Control Plane (CP):** Raftで構成された3〜7台(Raftアルゴリズムでうまく合意が取れる範囲)のサーバー。情報の「正規の持ち主」。いなくなったら自動でWorker Nodesから昇格する。
+ * **Worker Nodes (VM/DB Hosts):** 数百〜数千台の実働部隊。CPのクライアント。
+
+### 1\. データはどのように書き込まれるか? (Write)
+
+書き込みは **「必ず Control Plane の Raft Leader に対して」** 行います。Gossip経由での書き込みは(順序保証がないため)行いません。
+
+例:「VM-A を Node-10 で起動したい」
+
+1. **API Call:** 管理者(またはCLI)が、CPのAPIサーバーにリクエストを送ります。
+2. **Raft Log:** CPのリーダーは、この変更を `Put(Key="/nodes/node-10/tasks/vm-a", Value="START")` としてRaftログに追加します。
+3. **Commit:** 過半数のCPノードがログを保存したら「書き込み完了」と見なします。
+
+ここまでは普通のDBと同じです。
+
+### 2\. 各ノードはどのようにデータを取得し、通知を受けるか? (Read & Notify)
+
+ここが最大のポイントです。数千台のノードが「自分宛ての命令はないか?」と毎秒ポーリング(問い合わせ)すると、CPがDDoS攻撃を受けたようにパンクします。
+
+ここで **「Watch(ロングポーリング)」** という仕組みを使います。
+
+#### A. Watchによる通知と取得(これがメイン)
+
+Kubernetesやetcdが採用している方式です。
+
+1. **接続維持:** Node-10 は起動時に CP に対して `Watch("/nodes/node-10/")` というリクエストを送ります。
+2. **待機:** CP は「Node-10 以下のキーに変更があるまで、レスポンスを返さずに接続を維持(ブロック)」します。
+3. **イベント発火:** 先ほどの書き込み(VM起動命令)が発生した瞬間、CP は待機していた Node-10 への接続を通じて「更新イベント(Event: PUT, Key: ...vm-a, Value: START)」を即座にプッシュします。
+4. **アクション:** Node-10 は通知を受け取り次第、VMを起動します。
+
+**結論:** 「書き込み後の通知」は絶対に必要です。それを効率よくやるのが **Watch API** です。
+
+-----
+
+### 3\. じゃあ Gossip はどこで使うのか?
+
+「Raft + Watch」で完結しそうに見えますが、10台以上のスケール、特にVM基盤のような動的な環境では **Gossip が以下の「3つの穴」を埋めるために不可欠** になります。
+
+#### ① Nodeの死活監視・インベントリ管理(下り方向)
+
+CPが「Node-10にVMを立てたい」と思ったとき、「そもそもNode-10は生きているのか? IPは? 空きメモリは?」という情報を知る必要があります。
+
+ * **Gossipの役割:** 各Worker Nodeは、Gossip(SWIMプロトコル)でお互いに、そしてCPに対して「自分は生きてるよ、IPはこれだよ」と喋り続けます。
+ * CPはこのGossip情報を聞いて、最新の「ノード一覧リスト(Memberlist)」をメモリ上に保持します。
+
+#### ② サービスのディスカバリ(横方向)
+
+DB基盤の場合、「DBノードA」が「DBノードB」と通信したいことがあります。いちいちCPに聞きに行くと遅いです。
+
+ * **Gossipの役割:** ノード同士で「私はここにいるよ」とGossipし合うことで、CPを介さずに直接通信相手を見つけられます。
+
+#### ③ "Actual State"(現状)の報告(上り方向)
+
+VMが起動した後、「起動しました」というステータスをどうCPに伝えるか。
+
+ * **Raftに書く:** 確実ですが、頻繁に変わるステータス(CPU使用率など)を全部Raftに書くとCPがパンクします。
+ * **Gossipで流す:** 「VM-Aは起動中、負荷50%」といった情報はGossipに乗せて、**「結果的にCPに伝わればいい」** という扱いにします。
+
+-----
+
+### 設計のまとめ:RaftとGossipの使い分け
+
+これから作る「汎用管理DB(外部依存型)」は、以下のようなインターフェースを持つことになるでしょう。
+
+| アクション | 通信方式 | 具体的なデータ例 |
+| :--- | :--- | :--- |
+| **命令 (Desired State)**
「こうなってほしい」 | **Raft + Watch**
(強整合性) | ・VMの起動/停止命令
・DBのデータ配置情報の変更
・パスワードや設定変更 |
+| **現状 (Actual State)**
「今こうなってます」 | **Gossip**
(結果整合性) | ・ノードの生存確認 (Heartbeat)
・リソース使用率 (CPU/Mem)
・「VM起動完了」などのステータス |
+| **通知 (Notification)** | **Watch (HTTP/gRPC Stream)** | ・「新しい命令が来たぞ!」というトリガー |
+
+#### 実装のアドバイス
+
+もし「etcdのようなもの」を自作されるなら、**「Serf (Gossip)」と「Raft」をライブラリとして組み込み、その上に「gRPCによるWatch付きのKVS API」を被せる** という構成になります。
+
+これができれば、VM基盤は「Watchして、VMを起動して、Gossipでステータスを返すエージェント」を作るだけで済みますし、DB基盤も同様に作れます。非常にスケーラブルで美しい設計です。
diff --git a/chainfire/chainfire-client/Cargo.toml b/chainfire/chainfire-client/Cargo.toml
new file mode 100644
index 0000000..ba9dd90
--- /dev/null
+++ b/chainfire/chainfire-client/Cargo.toml
@@ -0,0 +1,31 @@
+[package]
+name = "chainfire-client"
+version.workspace = true
+edition.workspace = true
+license.workspace = true
+rust-version.workspace = true
+description = "Chainfire distributed KVS client library"
+
+[dependencies]
+chainfire-types = { workspace = true }
+chainfire-proto = { workspace = true }
+
+# gRPC
+tonic = { workspace = true }
+
+# Async
+tokio = { workspace = true }
+tokio-stream = { workspace = true }
+futures = { workspace = true }
+
+# Utilities
+tracing = { workspace = true }
+thiserror = { workspace = true }
+serde = { workspace = true }
+serde_json = { workspace = true }
+
+[dev-dependencies]
+tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
+
+[lints]
+workspace = true
diff --git a/chainfire/chainfire-client/src/client.rs b/chainfire/chainfire-client/src/client.rs
new file mode 100644
index 0000000..11bb272
--- /dev/null
+++ b/chainfire/chainfire-client/src/client.rs
@@ -0,0 +1,389 @@
+//! Chainfire client implementation
+
+use crate::error::{ClientError, Result};
+use crate::watch::WatchHandle;
+use chainfire_proto::proto::{
+ cluster_client::ClusterClient,
+ compare,
+ kv_client::KvClient,
+ request_op,
+ response_op,
+ watch_client::WatchClient,
+ Compare,
+ DeleteRangeRequest,
+ PutRequest,
+ RangeRequest,
+ RequestOp,
+ StatusRequest,
+ TxnRequest,
+};
+use tonic::transport::Channel;
+use tracing::debug;
+
+/// Chainfire client
+pub struct Client {
+ /// gRPC channel
+ channel: Channel,
+ /// KV client
+ kv: KvClient,
+ /// Cluster client
+ cluster: ClusterClient,
+}
+
+impl Client {
+ /// Connect to a Chainfire server
+ pub async fn connect(addr: impl AsRef) -> Result {
+ let addr = addr.as_ref().to_string();
+ debug!(addr = %addr, "Connecting to Chainfire");
+
+ let channel = Channel::from_shared(addr)
+ .map_err(|e| ClientError::Connection(e.to_string()))?
+ .connect()
+ .await?;
+
+ let kv = KvClient::new(channel.clone());
+ let cluster = ClusterClient::new(channel.clone());
+
+ Ok(Self {
+ channel,
+ kv,
+ cluster,
+ })
+ }
+
+ /// Put a key-value pair
+ pub async fn put(&mut self, key: impl AsRef<[u8]>, value: impl AsRef<[u8]>) -> Result {
+ let resp = self
+ .kv
+ .put(PutRequest {
+ key: key.as_ref().to_vec(),
+ value: value.as_ref().to_vec(),
+ lease: 0,
+ prev_kv: false,
+ })
+ .await?
+ .into_inner();
+
+ Ok(resp.header.map(|h| h.revision as u64).unwrap_or(0))
+ }
+
+ /// Put a key-value pair with string values
+ pub async fn put_str(&mut self, key: &str, value: &str) -> Result {
+ self.put(key.as_bytes(), value.as_bytes()).await
+ }
+
+ /// Get a value by key
+ pub async fn get(&mut self, key: impl AsRef<[u8]>) -> Result