pub struct UploadScrubbedTimelineRequest {
pub client_operation_id: String,
pub thread: Option<ThreadRef>,
pub run: Option<RecordRef>,
pub canonicalization_version: u32,
pub run_revision: u64,
pub snapshot: Option<UploadRunSummary>,
pub events: Vec<UploadTimelineEvent>,
pub origin: Option<TimelineOriginEndorsement>,
pub acceptance: Option<TimelineAdmissionAcceptance>,
pub first_position: u64,
}Expand description
One logical request for one Spool/Thread/run; encoded request <= 256 KiB. The full batch commits atomically. Every attempt needs a fresh method-bound Tier-1 PoP nonce/timestamp, including an identical retry. The authenticated uploader is an enrolled independent device root or active paired device as above, and its effective key must match the immutable origin uploader key. Under the Spool/Thread lock first admission enforces unique (spool_id,run_id) across ALL Threads and sharing epochs, and freezes the exact Thread, principal, actor class/effective key digest, uploader account/key and first sharing epoch. A different Thread or uploader cannot re-admit that run. Before accepting a new operation ID, check both the live run and durable keyed run fence across epochs. A purged run cannot be resurrected with a new operation ID, origin signature, or sharing re-enable. Retain the terminal operation digest fence and run HMAC fence after expiry, DISCARD or sharing purge, including runs with no policy deadline. Delete them with Thread/Spool deletion or relevant account/billing-lock deletion; the durable deletion fence then makes old attempts uniformly absent. A first upload requires a live origin chain at transaction time, an exact previously registered pre-expiry origin that has not since been revoked, or fresh scoped acceptance of this request. Later batches recheck the recorded admission basis and acceptance range, plus current uploader, sharing, billing, deletion, retention and revocation gates in the transaction.
Fields§
§client_operation_id: StringCanonical UUID; digest-bound under uploader account.
thread: Option<ThreadRef>Exact 32-byte Thread ID and canonical Spool UUID.
run: Option<RecordRef>Same Spool; run ID ASCII [A-Za-z0-9_-]{1,128}.
canonicalization_version: u32Exactly 1 in v1.
run_revision: u64Changed canonical snapshot requires a strictly larger revision. Same revision and hash is replay; same revision with another hash conflicts. An older revision cannot replace a newer snapshot.
snapshot: Option<UploadRunSummary>Canonical encoded summary <= 4096 bytes; required at first admission and for a zero-event run-only revision.
events: Vec<UploadTimelineEvent>0..64 events, consecutive from first_position. Zero requires a snapshot for a run-only revision, first_position == current next_position, and a durable run-upsert change despite accepting no event.
origin: Option<TimelineOriginEndorsement>Immutable across all batches.
acceptance: Option<TimelineAdmissionAcceptance>Required when current origin authority or a registered pre-expiry basis cannot authorize this exact batch; later ranges need fresh acceptance.
first_position: u640..2^63-1; equals first event position if present.
Trait Implementations§
Source§impl Clone for UploadScrubbedTimelineRequest
impl Clone for UploadScrubbedTimelineRequest
Source§fn clone(&self) -> UploadScrubbedTimelineRequest
fn clone(&self) -> UploadScrubbedTimelineRequest
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Default for UploadScrubbedTimelineRequest
impl Default for UploadScrubbedTimelineRequest
Source§fn default() -> UploadScrubbedTimelineRequest
fn default() -> UploadScrubbedTimelineRequest
Source§impl Message for UploadScrubbedTimelineRequest
impl Message for UploadScrubbedTimelineRequest
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.impl StructuralPartialEq for UploadScrubbedTimelineRequest
Auto Trait Implementations§
impl Freeze for UploadScrubbedTimelineRequest
impl RefUnwindSafe for UploadScrubbedTimelineRequest
impl Send for UploadScrubbedTimelineRequest
impl Sync for UploadScrubbedTimelineRequest
impl Unpin for UploadScrubbedTimelineRequest
impl UnsafeUnpin for UploadScrubbedTimelineRequest
impl UnwindSafe for UploadScrubbedTimelineRequest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more