Skip to main content

Conditions

Conditions are the significance layer (φ). They define when a concept's Result (Rₜ) is meaningful enough to act on. Conditions are immutable once created — changes produce new versions.

EndpointLevelDescription
POST /conditions/explainDefinition-levelExplains the condition logic — strategy, parameters, and why they were selected. No entity or execution required.
POST /decisions/explainInstance-levelExplains a specific Decision (Aₜ) for a given entity at a given timestamp — why it fired, which signals drove the Result (Rₜ).

Get Condition

GET /conditions/{id}

Retrieves a condition definition. Both id (path) and version (query) are required — no implicit latest resolution.

Parameters

ParameterTypeRequiredDescription
idstringRequired (path)Fully qualified condition id (namespace.id). Example: org.high_churn.
versionstringRequired (query)Explicit condition version. Example: "1.0".

Response — ConditionDefinition

ParameterTypeRequiredDescription
condition_id / versionstringAlwaysIdentifier and version.
concept_id / concept_versionstringAlwaysPinned concept this condition evaluates.
strategyStrategyDefinitionAlwaysStrategy type and resolved parameters.
deprecatedbooleanAlwaysWhether this version is deprecated.

Response Codes

StatusDescription
200Condition definition.
401Unauthorised.
404Not found.

TypeScript Example

const condition = await client.conditions.get({
conditionId: "org.high_churn",
version: "1.0",
});
console.log(condition.strategy);
// { type: "threshold", params: { direction: "above", value: 0.8 } }

Explain Condition

POST /conditions/explain

Definition-level. Explains the condition logic itself — what strategy is applied, why those parameters were selected, and the condition's relationship to its concept. Use for audit trails, compliance documentation, and reviewing guardrails decisions.

Determinism Guarantee

Same condition_id, condition_version, and timestamp always return the same explanation. Application context may influence terminology in natural language summaries — never decision values, parameter values, or attribution weights.

Request Body

ParameterTypeRequiredDescription
condition_idstringRequiredFully qualified condition identifier.
condition_versionstringRequiredExplicit version. No implicit latest.
timestampdatetimeOptionalISO 8601 UTC. Ensures reproducible explanation.

Response — ConditionExplanation

ParameterTypeRequiredDescription
natural_language_summarystringAlwaysHuman-readable description of what the condition evaluates and when it fires.
parameter_rationalestringAlwaysWhy these parameter values were selected — from guardrails priors, bias rules, or explicit user input.
strategyobjectAlwaysStrategy type and resolved parameters.
concept_idstringAlwaysThe concept this condition evaluates.

Response Codes

StatusDescription
200ConditionExplanation.
401Unauthorised.
404Condition not found.

TypeScript Example

const exp = await client.conditions.explain({
conditionId: "org.high_churn",
conditionVersion: "1.0",
});

console.log(exp.natural_language_summary);
// "Fires when churn_risk score exceeds 0.8 — the high-severity threshold
// based on guardrails priors."

console.log(exp.parameter_rationale);
// "Threshold 0.8 from primitive-level prior at high severity.
// Severity resolved from \"significantly\" via severity vocabulary."

Calibrate Condition

POST /conditions/calibrate

Analyses stored feedback and/or a target alert volume to recommend adjusted parameters. Does not modify the existing condition — call POST /conditions/apply-calibration to create a new version.

Strategy coverage: Supports threshold, percentile, change, and z_score. For equals strategy, always returns status: no_recommendation with reason: not_applicable_strategy — no numeric parameter to adjust.

Bounds Enforcement

Recommendations are validated against guardrails threshold_bounds. If exceeded, on_bounds_exceeded applies (clamp or reject). Bounds cannot be crossed.

Request Body

ParameterTypeRequiredDescription
condition_idstringRequiredFully qualified condition identifier.
condition_versionstringRequiredVersion to calibrate.
target.alerts_per_daynumberOptionalTarget alert frequency.
feedback_directionenumOptionaltighten | relax. Overrides direction derived from stored feedback.

Response — CalibrationResult

ParameterTypeRequiredDescription
statusenumAlwaysrecommendation_available | no_recommendation.
recommended_paramsobjectConditionalStrategy parameter key-values when recommendation available.
calibration_tokenstringConditionalPass to apply-calibration.
impact.delta_alertsnumberConditionalEstimated change in daily alert volume.
current_paramsobjectAlwaysCurrent parameters for comparison.
no_recommendation_reasonstringConditionalbounds_exceeded | not_applicable_strategy | insufficient_data.

Response Codes

StatusDescription
200Always HTTP 200. Inspect status field.
401Unauthorised.
404Condition not found.

TypeScript Example

const result = await client.conditions.calibrate({
conditionId: "org.high_churn",
conditionVersion: "1.0",
target: { alertsPerDay: 5 },
});

if (result.status === "recommendation_available") {
console.log(result.recommended_params); // { value: 0.85 }
console.log(result.impact.delta_alerts); // -12
} else {
console.log(result.no_recommendation_reason);
}

Apply Calibration

POST /conditions/apply-calibration

Creates a new immutable condition version from the calibration recommendation. The existing version is never modified.

Rebinding is Always Explicit

This endpoint does not auto-rebind tasks. It returns tasks_pending_rebind so you know which tasks still need rebinding. Call PATCH /tasks/{id} for each. This prevents silent behavior changes.

Request Body

ParameterTypeRequiredDescription
calibration_tokenstringRequiredToken from POST /conditions/calibrate. Single-use, expires 24h.
new_versionstringOptionalVersion string. Auto-incremented if not provided.

Response — ApplyCalibrationResult

ParameterTypeRequiredDescription
condition_idstringAlwaysCondition identifier.
previous_version / new_versionstringAlwaysThe calibrated and newly created versions.
params_appliedobjectAlwaysParameters written to the new version.
tasks_pending_rebindarrayAlwaysTasks still bound to previous_version. Each item: task_id, intent.

Response Codes

StatusDescription
200New condition version created.
400Invalid or expired token.
401Unauthorised.

TypeScript Example

const applied = await client.conditions.applyCalibration({
calibrationToken: result.calibration_token,
});

console.log(applied.new_version); // "1.1"
console.log(applied.params_applied); // { value: 0.85 }

for (const t of applied.tasks_pending_rebind) {
await client.tasks.update(t.task_id, { conditionVersion: applied.new_version });
}