Skip to content

After parity: the post-0.3 backlog — dynamic tables to production grade, then Skiff to full #63

Description

@sshaplygin

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.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 #64put 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.

Skiff to "full"

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 #69docs/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 #70the production-cluster Skiff run docs/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.

The tail from #6 — priority: later

Unchanged and unreordered from #6. None of it blocks a deployment.

Outward — human-gated; the code is ready

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestparityClosing a gap against the official C++/Go clients

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions