You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Successor to #6, which closed on 16 August 2026 at ce41f7a / 0.3.1 with its charter met: the blocker, the four things a real installation refused, and every before production item are implemented and released. This issue carries what #6 left unfinished, plus the work 0.3 created that #6 could not have named.
Every item below has its own issue with the detail, as #6 did. This one stays the index and the order.
Standing rules, unchanged. Publishing, yanks and new crates need explicit human approval. Semver and a CHANGELOG entry per release. Protocol facts come from the documents first and the code second. Green CI per item. Pinned references — Go SDK v0.0.33 for Skiff vectors, stable/25.4 for the protos — do not advance merely because something newer exists.
Hygiene
Put rpc_e2e into CI: the RPC client's only live check runs by hand #64 — put rpc_e2e into CI.docs/rpc-compatibility.md records that the RPC cluster run exists as an example (cargo run -p ytsaurus-rpc --example rpc_e2e) but is not in CI. Wire it into the post-merge cluster-e2e workflow next to the HTTP one; it needs an RPC-enabled local cluster image.
Dynamic tables to production grade
Promoted by human decision, 16 August 2026: dynamic tables are a first-class need, not a side quest, and they come before Skiff. What exists today is lookup_rows, select_rows, modify_rows and tablet transactions over both transports, behind one ytsaurus-api interface — plus the blocking facade, which is built and implements TableClient, so a synchronous map can already enrich rows from a dynamic table mid-job.
RPC production plumbing: discovery bootstrap, a connection pool, and the TLS story #66 — RPC production plumbing — the open gates of docs/rpc-compatibility.md. HTTP discover_proxies bootstrap (gate D: DiscoverProxies over RPC works, but it needs a proxy already; ytsaurus-client speaks HTTP v4 and can answer it without adding an HTTP stack to ytsaurus-rpc), and a connection pool with per-proxy health and banning. One hand-configured connection per client does not survive a real multi-proxy installation. Settle the TLS story for the bus transport while there — a peer that requires encryption is currently refused, not downgraded, which is the right default and not a complete answer.
The in-tree plan is authoritative; this is its index. Demoted below dynamic tables by the same 16 August 2026 decision.
Skiff to full: execute the in-tree plan, phases 1-5 #69 — docs/skiff-full-support-plan.md, phases 1–5: serialization parity → table schema matching → YT logical types → typed rows → a standing gate against the C++ implementation. Phase 1 first because it is byte-level and every later phase encodes through it; phase 2 next because that is where a cluster-written schema is most likely to be refused today; phase 3 is the largest and depends on both. Nothing in phases 1–3 changes the bytes this crate writes — the 16 August run established those are already the C++ ones.
The production-cluster Skiff run the format comparison says is owed #70 — the production-cluster Skiff rundocs/format-comparison.md says is owed. Local rounds scatter 2× and the harness refuses to report when the rounds cannot separate the signal, so this is a matter of running it where the noise is smaller.
yson-rs convergence: offer the patches, measure the drift, agree a direction #73 — yson-rs convergence.ss123she/yson-rs is alive — 0.1.3 on crates.io on 12 August, 0.2.0 within days. Offer the three defect patches, diff the fork against upstream 0.2.0 to measure the drift, and have the direction conversation before the two codebases grow permanently apart. The vendoring paperwork stays intact either way, and this project never claims the yson-rs name.
The standing question
With nine crates, dynamic tables over two transports and CI gates on every PR: is ytsaurus-rs still "a job toolkit", or is it the de-facto Rust SDK that ytsaurus/ytsaurus#6 asked for — and should the README start saying so?
Successor to #6, which closed on 16 August 2026 at
ce41f7a/ 0.3.1 with its charter met: the blocker, the four things a real installation refused, and every before production item are implemented and released. This issue carries what #6 left unfinished, plus the work 0.3 created that #6 could not have named.The plans are in-tree now. This is an index over them and the backlog of what is not written down anywhere else — not a replacement for them. Where a document exists, it is authoritative:
docs/skiff-full-support-plan.md,docs/rpc-compatibility.md,docs/format-comparison.md,docs/go-parity.md,docs/sdk-comparison.md.Every item below has its own issue with the detail, as #6 did. This one stays the index and the order.
Standing rules, unchanged. Publishing, yanks and new crates need explicit human approval. Semver and a CHANGELOG entry per release. Protocol facts come from the documents first and the code second. Green CI per item. Pinned references — Go SDK v0.0.33 for Skiff vectors,
stable/25.4for the protos — do not advance merely because something newer exists.Hygiene
rpc_e2einto CI.docs/rpc-compatibility.mdrecords that the RPC cluster run exists as an example (cargo run -p ytsaurus-rpc --example rpc_e2e) but is not in CI. Wire it into the post-merge cluster-e2e workflow next to the HTTP one; it needs an RPC-enabled local cluster image.Dynamic tables to production grade
Promoted by human decision, 16 August 2026: dynamic tables are a first-class need, not a side quest, and they come before Skiff. What exists today is
lookup_rows,select_rows,modify_rowsand tablet transactions over both transports, behind oneytsaurus-apiinterface — plus the blocking facade, which is built and implementsTableClient, so a synchronous map can already enrich rows from a dynamic table mid-job.mount_table/unmount_table/remount_table/reshard_table, plus freeze and unfreeze. Light commands, days of work, and the missing half of the lifecycle — today they are raw-command-only, which is to say the escape hatch Raw command escape hatch: a command the crate does not model cannot be sent at all #7 opened is doing a job it should not have to.docs/rpc-compatibility.md. HTTPdiscover_proxiesbootstrap (gate D:DiscoverProxiesover RPC works, but it needs a proxy already;ytsaurus-clientspeaks HTTP v4 and can answer it without adding an HTTP stack toytsaurus-rpc), and a connection pool with per-proxy health and banning. One hand-configured connection per client does not survive a real multi-proxy installation. Settle the TLS story for the bus transport while there — a peer that requires encryption is currently refused, not downgraded, which is the right default and not a complete answer.tablet_indexwrites,trim), and amigrate-style schema-evolution helper of the kind the Go SDK has.Skiff to "full"
The in-tree plan is authoritative; this is its index. Demoted below dynamic tables by the same 16 August 2026 decision.
docs/skiff-full-support-plan.md, phases 1–5: serialization parity → table schema matching → YT logical types → typed rows → a standing gate against the C++ implementation. Phase 1 first because it is byte-level and every later phase encodes through it; phase 2 next because that is where a cluster-written schema is most likely to be refused today; phase 3 is the largest and depends on both. Nothing in phases 1–3 changes the bytes this crate writes — the 16 August run established those are already the C++ ones.docs/format-comparison.mdsays is owed. Local rounds scatter 2× and the harness refuses to report when the rounds cannot separate the signal, so this is a matter of running it where the noise is smaller.The tail from #6 — priority: later
Unchanged and unreordered from #6. None of it blocks a deployment.
whoamiandcheck_permissionunlock, andchild_key/attribute_keylock modesseton a whole node,multiset_attributes,create_objectOutward — human-gated; the code is ready
ytsaurus/ytsaurus-rust-sdk. The offer is much stronger than it would have been six months ago: nine released crates, an RPC client, dynamic tables, and CI with a benchmark gate.yson-rsname.The standing question
With nine crates, dynamic tables over two transports and CI gates on every PR: is
ytsaurus-rsstill "a job toolkit", or is it the de-facto Rust SDK that ytsaurus/ytsaurus#6 asked for — and should the README start saying so?