Skip to content

feat(transaction): experimental action-based transaction format skeleton#7671

Draft
wjones127 wants to merge 1 commit into
will/experimental-feature-flagsfrom
will/unstable-action-transactions-skeleton
Draft

feat(transaction): experimental action-based transaction format skeleton#7671
wjones127 wants to merge 1 commit into
will/experimental-feature-flagsfrom
will/unstable-action-transactions-skeleton

Conversation

@wjones127

Copy link
Copy Markdown
Contributor

Skeleton establishing the shape and safety gating of action-based
(UserOperation) transactions — the first slice of the Action-based
Transactions milestone (discussion #5960).

Stacked on #7670

This PR is stacked on #7670 (the general experimental-feature mechanism).
Its first commit belongs to #7670; review that PR first. Action-based
transactions are the first consumer of that mechanism rather than claiming a
dedicated feature-flag bit:

  • A dataset using action-based transactions declares the "action-transactions"
    experimental feature, registered in known_experimental_features() only under
    the unstable-action-transactions Cargo feature.
  • That sets FLAG_EXPERIMENTAL, so libraries that don't understand it fail
    closed. On graduation (PMC vote), the name moves onto its own dedicated bit.

Double gating

  1. Cargo feature — everything is behind the non-default
    unstable-action-transactions feature, so it is not compiled into released
    builds at all.
  2. Experimental feature flag — via FLAG_EXPERIMENTAL + the
    "action-transactions" name, as above.

What's here (the skeleton commit)

  • protos/transaction_experimental.protoUserOperation / UserAction /
    Action (with AddFragments only, as a proof of shape), in a separate proto
    file so canonical transaction.proto stays clean until promotion. Compiled
    only under the feature.
  • lance_table::transaction — Rust UserOperation / UserAction / Action /
    AddFragments types with protobuf conversions, a roundtrip test, and the
    FEATURE_NAME constant.
  • Registration of "action-transactions" in the experimental-feature registry,
    with admission tests for both default-build (rejected) and feature-on
    (recognized).

What's NOT here (follow-up vertical slices)

  • Translation from Operation, apply, and conflict resolution.
  • Wiring into the commit path / public API (nothing yet populates the
    experimental feature list).
  • The remaining actions beyond AddFragments.

Part of #5960. Precedes the proto PMC vote (#6455), which will promote the
finalized messages into transaction.proto.

🤖 Generated with Claude Code

Skeleton for the Action-based Transactions milestone (discussion #5960),
gated behind the non-default `unstable-action-transactions` Cargo feature so
it is absent from released artifacts.

Stacked on the general experimental-feature mechanism (#7646): rather than
claiming a dedicated feature-flag bit, action-based transactions are the first
consumer of FLAG_EXPERIMENTAL. A dataset declares the "action-transactions"
experimental feature (registered in `known_experimental_features` under the
Cargo feature), which sets the bit so libraries without it fail closed.

- protos/transaction_experimental.proto: UserOperation / UserAction / Action
  (AddFragments only), compiled only under the feature.
- lance_table::transaction: UserOperation/UserAction/Action/AddFragments Rust
  types with protobuf conversions and a roundtrip test; FEATURE_NAME constant.
- Register "action-transactions" in the experimental-feature registry, with
  admission tests for both default (rejected) and feature-on (recognized).

The wire format carries no compatibility guarantee until finalized by PMC vote,
at which point it graduates to its own feature-flag bit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Important

This PR touches the Lance format specification.

Substantive changes to the format specification — the .proto definitions
and the spec docs under docs/src/format/ — require a PMC vote before merge.
Minor edits such as typo fixes, wording, or formatting are excluded; use your
judgment.

If this is a meaningful format change:

  • Start a vote following the Lance community voting process.
    Format specification modifications need 3 binding +1 votes (excluding the
    proposer), held on GitHub Discussions, with a minimum voting period of 1 week.
  • Once the vote passes, link the completed vote in this PR. It should not be
    merged until the vote is linked.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-format On-disk format: protos and format spec docs enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant