5765fb57be
Manual squash-merge of feature/story-478_… into master after the in-pipeline mergemaster runs failed silently. The 478 agent did substantial real work across multiple respawn cycles before being interrupted; commits on the feature branch were intact and verified high-quality but never merged via the normal pipeline path due to compounding bugs: - The first mergemaster attempt ran ($0.82 in tokens) and exited "Done" cleanly but didn't push anything to master — likely the worktree was briefly on master rather than the feature branch when the merge_agent_work MCP tool ran, so it found nothing to merge. - Subsequent timer fires defaulted to spawning coders instead of resuming mergemaster, burning more tokens for no progress. - Bug 510 (split-brain shadows yanking done stories back to current) and bug 501 (timers don't cancel on stop/completion) compounded the cost. What this commit lands: - server/src/crdt_sync.rs (new, ~518 lines): GET /crdt-sync WebSocket handler that subscribes to locally-applied SignedOps and streams them as binary frames. Per-peer bounded queue (256 ops) drops slow peers. - server/src/crdt_state.rs: new public functions subscribe_ops(), all_ops_json(), apply_remote_op() backing the sync handler. Adds the CRDT_OP_TX broadcast channel (capacity 1024). - server/src/main.rs: wires up the sync subsystem at startup. - server/src/http/mod.rs: registers the new endpoint. - server/src/config.rs: adds optional rendezvous field for outbound peers. - server/src/worktree.rs: minor changes from the original branch. - server/Cargo.toml: cfg lint suppression for CrdtNode derive. - crates/bft-json-crdt/src/debug.rs: fix unused-variable warnings. Resolved a trivial test-mod merge conflict in crdt_state.rs (both 478 and 503 added new tests at the end of the test module — kept both sets). Note: this is the squash of the original 478 work that the user explicitly authorized landing. The earlier rogue commit ac9f3ecf — which added a DIFFERENT, broken implementation of the same feature directly to master under the user's identity without consent — was reverted earlier in this session. The forensic tags rogue-commit-2026-04-09-ac9f3ecf and pre-502-reset-2026-04-09 still exist for incident audit. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
58 lines
1.9 KiB
TOML
58 lines
1.9 KiB
TOML
[package]
|
|
name = "huskies"
|
|
version = "0.9.0"
|
|
edition = "2024"
|
|
build = "build.rs"
|
|
|
|
[dependencies]
|
|
async-stream = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
bytes = { workspace = true }
|
|
chrono = { workspace = true, features = ["serde"] }
|
|
chrono-tz = { workspace = true }
|
|
eventsource-stream = { workspace = true }
|
|
futures = { workspace = true }
|
|
homedir = { workspace = true }
|
|
ignore = { workspace = true }
|
|
mime_guess = { workspace = true }
|
|
notify = { workspace = true }
|
|
poem = { workspace = true, features = ["websocket"] }
|
|
poem-openapi = { workspace = true, features = ["swagger-ui"] }
|
|
portable-pty = { workspace = true }
|
|
reqwest = { workspace = true, features = ["json", "stream", "form"] }
|
|
rust-embed = { workspace = true }
|
|
serde = { workspace = true, features = ["derive"] }
|
|
serde_json = { workspace = true }
|
|
serde_urlencoded = { workspace = true }
|
|
sha2 = { workspace = true }
|
|
serde_yaml = { workspace = true }
|
|
strip-ansi-escapes = { workspace = true }
|
|
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "sync", "process"] }
|
|
toml = { workspace = true }
|
|
uuid = { workspace = true, features = ["v4", "serde"] }
|
|
walkdir = { workspace = true }
|
|
matrix-sdk = { workspace = true }
|
|
pulldown-cmark = { workspace = true }
|
|
regex = { workspace = true }
|
|
tokio-tungstenite = { workspace = true }
|
|
|
|
# Force bundled SQLite so static musl builds don't need a system libsqlite3
|
|
libsqlite3-sys = { version = "0.35.0", features = ["bundled"] }
|
|
sqlx = { workspace = true }
|
|
wait-timeout = "0.2.1"
|
|
bft-json-crdt = { path = "../crates/bft-json-crdt", default-features = false, features = ["bft"] }
|
|
fastcrypto = "0.1.8"
|
|
indexmap = { version = "2.2.6", features = ["serde"] }
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = { workspace = true }
|
|
|
|
[lints.rust.unexpected_cfgs]
|
|
level = "warn"
|
|
check-cfg = ["cfg(feature, values(\"logging-base\"))"]
|
|
|
|
[dev-dependencies]
|
|
tempfile = { workspace = true }
|
|
mockito = "1"
|
|
filetime = { workspace = true }
|