Skip to main content

NextStep

Struct NextStep 

Source
pub struct NextStep {
    pub id: String,
    pub command: String,
    pub reason: String,
}
Expand description

A read-only follow-up command fallow surfaces from the current findings, emitted as the top-level next_steps array on each command’s JSON envelope.

next_steps exists to point agents and humans sideways to fallow’s adjacent verification capabilities (trace, complexity breakdown, audit, workspace scoping) that telemetry shows agents rarely discover, because they act on the output in front of them rather than on reference docs.

§Two hard contracts

  1. Read-only. A next_step NEVER suggests fallow fix or any mutating command. Fallow surfaces evidence and verification paths; deciding and applying the remediation is the agent’s job.
  2. Runnable, placeholder-free. command is always runnable as-is. It never contains an angle-bracket placeholder (<...>); finding-derived values are filled in from a real, deterministically-selected finding, and any environment- or user-specific value that cannot be made concrete lives in reason instead. An agent can copy command and run it without edits.

Both contracts are enforced by unit tests in crates/cli/src/report/suggestions.rs.

Note: a SEPARATE, unrelated next_steps field exists on the coverage setup envelope (CoverageSetupOutput.next_steps) as a plain Vec<String> of human onboarding steps. Consumers that read multiple envelope kinds must route on the envelope’s kind before interpreting a next_steps field: on analysis envelopes it is Vec<NextStep> objects, on coverage setup it is Vec<String>.

Fields§

§id: String

Stable kebab-case key for machine dispatch and de-duplication (for example "trace-unused-export"). Identity is stable across runs; the command and reason strings may vary with the findings.

§command: String

A runnable, read-only command string. Placeholder-free by contract.

§reason: String

One short phrase explaining why this helps. Carries any value that cannot be made concrete in command.

Trait Implementations§

Source§

impl Clone for NextStep

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NextStep

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Serialize for NextStep

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.