Skip to main content

OutputContract

Struct OutputContract 

Source
pub struct OutputContract {
    pub format: String,
    pub required_sections: Vec<String>,
    pub schema: Option<Value>,
    pub output_file: Option<String>,
    pub required_keys: Vec<String>,
    pub min_length: Option<usize>,
    pub max_length: Option<usize>,
    pub must_match: Vec<String>,
    pub must_not_match: Vec<String>,
    pub allowed_files: Vec<String>,
    pub reports: Vec<ReportContract>,
}
Expand description

Output contract for validating stage results

Fields§

§format: String

Expected output format (markdown, json, text, yaml, code)

§required_sections: Vec<String>

Required sections in the output

§schema: Option<Value>

JSON schema for structured output validation

§output_file: Option<String>

Output file name (for file-based contracts)

§required_keys: Vec<String>

Required JSON keys (for quick validation without full schema)

§min_length: Option<usize>

Minimum output length in characters

§max_length: Option<usize>

Maximum output length in characters

§must_match: Vec<String>

Regular expression patterns the output must match

§must_not_match: Vec<String>

Regular expression patterns the output must NOT match

§allowed_files: Vec<String>

Allow-list of file globs the stage is permitted to create or modify.

Empty means “no restriction”. If present, files written by the stage that don’t match any pattern are surfaced as UnexpectedFile observations — not hard violations, so the run still completes, but the user sees what the AI added beyond the spec. This closes JTBD issue #44 (spec-drift detection).

§reports: Vec<ReportContract>

Named reports the stage produces under .ccswarm/runs/<run-id>/reports/.

Each entry maps to a deterministically named file (e.g. plan.md) that downstream stages can reference via the {report:<name>} template variable. Adopted from takt’s output_contracts.report to replace the brittle {plan_output} state-variable wiring with a contract that’s readable from disk after the run.

v0.7.0 semantics: if exactly one report is declared, the stage’s full response is written verbatim to it. Multi-report support (with AI-emitted <<<REPORT:name>>> delimiters) is intentionally deferred.

Trait Implementations§

Source§

impl Clone for OutputContract

Source§

fn clone(&self) -> OutputContract

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 OutputContract

Source§

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

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

impl<'de> Deserialize<'de> for OutputContract

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for OutputContract

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more