feat(transaction): experimental action-based transaction format skeleton#7641
Closed
wjones127 wants to merge 2 commits into
Closed
feat(transaction): experimental action-based transaction format skeleton#7641wjones127 wants to merge 2 commits into
wjones127 wants to merge 2 commits into
Conversation
Contributor
|
Important This PR touches the Lance format specification. Substantive changes to the format specification — the If this is a meaningful format change:
|
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Proposes and implements a general mechanism for shipping experimental format features without burning a permanent feature-flag bit per experiment. Policy (design doc) and the proto/format change are together so they can be reviewed and voted on as one. Mechanism: - Reserve one persisted bit, FLAG_EXPERIMENTAL (1 << 6, reusing the old first FLAG_UNKNOWN bit), meaning "this dataset uses experimental feature(s)". It is the fail-closed anchor: pre-mechanism libraries reject the dataset on the bit alone. - Carry feature identities in free-form manifest string lists (experimental_reader_features / experimental_writer_features). New libraries admit a dataset iff they understand every declared name. - A compile-time registry (known_experimental_features) lists the experiments a build understands, gated by each experiment's Cargo feature; a default build understands none and so rejects any experimental dataset. This keeps experiments free-flowing (unbounded string namespace, mint/abandon at will) while the bitmap stays conservative (a bit is spent only at graduation). Design, graduation/lifecycle, alternatives, and prior art (Delta Lake table features) in rust/lance-table/design/experimental_feature_flags.md. can_read_dataset / can_write_dataset now take the declared experimental feature list alongside the flags (two internal callers updated). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Skeleton for the Action-based Transactions milestone (discussion lance-format#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 (lance-format#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>
ffd8196 to
f464a85
Compare
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Skeleton establishing the shape and safety gating of action-based
(
UserOperation) transactions — the first slice of the Action-basedTransactions milestone (discussion #5960).
Stacked on #7646
This PR is stacked on #7646 (the general experimental-feature mechanism).
Its first commit belongs to #7646; review that PR first. Action-based
transactions are the first consumer of that mechanism rather than claiming a
dedicated feature-flag bit:
"action-transactions"experimental feature, registered in
known_experimental_features()only underthe
unstable-action-transactionsCargo feature.FLAG_EXPERIMENTAL, so libraries that don't understand it failclosed. On graduation (PMC vote), the name moves onto its own dedicated bit.
Double gating
unstable-action-transactionsfeature, so it is not compiled into releasedbuilds at all.
FLAG_EXPERIMENTAL+ the"action-transactions"name, as above.What's here (the skeleton commit)
protos/transaction_experimental.proto—UserOperation/UserAction/Action(withAddFragmentsonly, as a proof of shape), in a separate protofile so canonical
transaction.protostays clean until promotion. Compiledonly under the feature.
lance_table::transaction— RustUserOperation/UserAction/Action/AddFragmentstypes with protobuf conversions, a roundtrip test, and theFEATURE_NAMEconstant."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)
Operation,apply, and conflict resolution.experimental feature list).
AddFragments.Part of #5960. Precedes the proto PMC vote (#6455), which will promote the
finalized messages into
transaction.proto.🤖 Generated with Claude Code