Parent
Execution
AFK. This is the first tracer bullet and can start immediately after its body is verified.
What to build
Establish the smallest real Open Engine Cluster Protocol v1 path: a Rust client negotiates openengine.cluster/v1 with a backend-neutral server and reads the canonical empty cluster state. The same behavior must work in process and through NDJSON stdio, proving the wire and backend seams before later graph or lifecycle semantics are added.
The slice introduces the Cargo workspace and the four foundation crates (openengine-cluster-protocol, openengine-cluster-server, openengine-cluster-client, and openengine-cluster-testkit), a pinned Rust toolchain, generated-artifact drift checking, and the async ClusterBackend/client transport boundaries. Only initialize and empty get are functional in this issue; other methods may be typed but must return an explicit unsupported-domain response rather than pretend to work.
JSON-RPC uses named params, rejects batches, keeps stdout protocol-only in stdio mode, and reports diagnostics on stderr. Empty state has spec:null, phase:"empty", no generation/run ID, and atCursor:null.
Acceptance criteria
Verification
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
npm run lint
npm test
opcore check --changed
Blocked by
None - can start immediately.
Parent
Execution
AFK. This is the first tracer bullet and can start immediately after its body is verified.
What to build
Establish the smallest real Open Engine Cluster Protocol v1 path: a Rust client negotiates
openengine.cluster/v1with a backend-neutral server and reads the canonical empty cluster state. The same behavior must work in process and through NDJSON stdio, proving the wire and backend seams before later graph or lifecycle semantics are added.The slice introduces the Cargo workspace and the four foundation crates (
openengine-cluster-protocol,openengine-cluster-server,openengine-cluster-client, andopenengine-cluster-testkit), a pinned Rust toolchain, generated-artifact drift checking, and the asyncClusterBackend/client transport boundaries. Onlyinitializeand emptygetare functional in this issue; other methods may be typed but must return an explicit unsupported-domain response rather than pretend to work.JSON-RPC uses named params, rejects batches, keeps stdout protocol-only in stdio mode, and reports diagnostics on stderr. Empty state has
spec:null,phase:"empty", no generation/run ID, andatCursor:null.Acceptance criteria
openengine.cluster/v1; an incompatible version returnsUNSUPPORTED_PROTOCOL_VERSIONinerror.data.code.initializeandgetreturn the same canonical empty status over in-process and NDJSON stdio transports.opcore check --changedpass.checkjob runs the Rust gates; Rust is not placed only in an optional side job.AGENTS.mddocuments the new protocol crate routing and source-of-truth convention;CLAUDE.mdis untouched.Verification
Blocked by
None - can start immediately.