pub enum ProvenanceTier {
Runtime,
Maintainer,
Public,
}Expand description
The trust tier of one issue. Exactly one, always resolved before its text is readable.
Variants§
Runtime
Filed by the account this runtime authenticates as (gh api user),
carrying a signature this process recomputed locally. May seed a session
and may source an outcome contract: this process authored the
reproduction, not a model and not a stranger.
Note what this is not: there is no dedicated bot account today, so in
practice it is whichever operator ran gh auth login. That is why
deduplication in super::fix_issues accepts maintainer too — a
teammate’s report is not a forgery — and why only public is excluded.
Maintainer
The author holds write, maintain, triage or admin permission on the repository. May seed a session. The body is still data, not instruction.
Public
Everyone else — and the default whenever permission cannot be established at all. Never seeds a session, never sources a contract.
Implementations§
Source§impl ProvenanceTier
impl ProvenanceTier
pub fn as_str(self) -> &'static str
Sourcepub fn may_seed_session(self) -> bool
pub fn may_seed_session(self) -> bool
Whether an issue at this tier may seed a coder session.
Sourcepub fn may_source_contract(self) -> bool
pub fn may_source_contract(self) -> bool
Whether an issue at this tier may source an outcome contract.
Runtime only, matching the table in car#1081: a contract may derive from the attached machine-generated reproduction because the runtime authored it — not a model, and not a person.
This deliberately does NOT extend to maintainer. An earlier version
did, arguing that a maintainer “holds write access to the repository, so
gating their issue body while leaving that door open would be theatre”.
That argument is false for one of the roles RepoPermission::is_maintainer
accepts: GitHub defines triage as managing issues and pull requests
without write access to the code. For a triage collaborator the door
is not already open, so this gate is not theatre — it is the only gate.
Why that matters concretely: car-releases is public, and triage is the
role handed to a community moderator. One triage account, granted or
compromised, could otherwise open an issue whose body sources a
trivially-green contract, pass it against an untouched baseline, and
mint a runtime-stamped “premise wrong, already fixed” — the exact
contract-poisoning write path car#1081 was filed to close, reached by
someone who cannot push a commit.
A maintainer may still seed a session (Self::may_seed_session);
that is where the write-access argument genuinely applies.
Trait Implementations§
Source§impl Clone for ProvenanceTier
impl Clone for ProvenanceTier
impl Copy for ProvenanceTier
Source§impl Debug for ProvenanceTier
impl Debug for ProvenanceTier
Source§impl<'de> Deserialize<'de> for ProvenanceTier
impl<'de> Deserialize<'de> for ProvenanceTier
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for ProvenanceTier
impl Display for ProvenanceTier
impl Eq for ProvenanceTier
Source§impl PartialEq for ProvenanceTier
impl PartialEq for ProvenanceTier
Source§impl Serialize for ProvenanceTier
impl Serialize for ProvenanceTier
impl StructuralPartialEq for ProvenanceTier
Auto Trait Implementations§
impl Freeze for ProvenanceTier
impl RefUnwindSafe for ProvenanceTier
impl Send for ProvenanceTier
impl Sync for ProvenanceTier
impl Unpin for ProvenanceTier
impl UnsafeUnpin for ProvenanceTier
impl UnwindSafe for ProvenanceTier
Blanket Implementations§
impl<T> Boilerplate for T
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more