Skip to content

operator runbooks

Intended Documentation

Simulate Policy Impact

Preview the effect of a policy change before deploying — read the draft impact summary (semantic diff, changed-outcome projection, rollout-safety checklist) and dry-run individual intents with POST /intent/simulate. No fictional blast-radius or drift CLI.

Simulate Policy Impact#

Before you promote a draft, preview its effect. Intended gives you two complementary tools: a draft impact summary that projects how the change shifts outcomes across a sample of traffic, and an intent-level dry run that shows exactly what a single intent would decide. Use the summary to size the change and the dry run to confirm specific cases.

No `intended policy simulate …`, no drift/blast-radius commands

There is no intended policy simulate compare, intended policy drift detect, intended policy simulate blast-radius, or intended policy pull — those CLI commands do not exist. Impact preview is the GET /policy/drafts/:id/impact-summary API (also surfaced in the console policy editor); intent dry-run is POST /intent/simulate, available as the flat simulate CLI command. A dedicated drift/blast-radius CLI is Roadmap.

Prerequisites#

  • A draft created through Author a Policy.
  • The authority:policy:write permission to read the impact summary, or intent:create to run an intent dry run.
  • Matching tenant scope on credential, x-tenant-id, and body tenantId.

Tip

Both tools are read-only. They never mutate the active runtime configuration — run them as often as you like.

Draft impact summary#

GET /policy/drafts/:id/impact-summary projects how a draft would change outcomes if deployed. It samples recent intents, re-evaluates them under the draft, and returns three things:

  1. A semanticDiff — what changed between the active set and the draft, in rule terms.
  2. An impact projection — sample size, the changed-outcome rate, deltas in approval load and token issuance, a confidence figure, and a lowData flag when the sample is too small to trust.
  3. A rolloutSafety checklist with a recommendedMode of shadow, review, or enforce.
bash
curl "https://api.intended.so/policy/drafts/draft_123/impact-summary?tenantId=tenant_acme_prod" \
  -H "Authorization: Bearer $INTENDED_API_KEY" \
  -H "x-tenant-id: tenant_acme_prod"

Reading the result#

json
{
  "semanticDiff": {
    "addedRules": ["rule_prod_release"],
    "removedRules": [],
    "changedRules": []
  },
  "impact": {
    "sampleSize": 1842,
    "changedOutcomeRate": 0.011,
    "approvalLoadDelta": 21,
    "tokenIssuanceDelta": -21,
    "confidence": 0.86,
    "lowData": false
  },
  "rolloutSafety": {
    "recommendedMode": "review",
    "checks": [
      { "name": "changed-outcome rate within bound", "ok": true },
      { "name": "sample size sufficient", "ok": true }
    ]
  }
}
FieldWhat it tells you
impact.changedOutcomeRateFraction of sampled intents whose decision flips under the draft. The headline number — watch decisions moving from APPROVED to DENIED/ESCALATED.
impact.approvalLoadDeltaHow many more (or fewer) intents will require human approval.
impact.tokenIssuanceDeltaChange in tokens minted — a proxy for how many actions will now be blocked or gated.
impact.confidence / lowDataHow much to trust the projection. If lowData is true, gather more traffic before enforcing.
rolloutSafety.recommendedModeThe safe way to ship: shadow (evaluate, don't enforce), review (gate via approval), or enforce.

Warning

A negative tokenIssuanceDelta paired with a non-trivial changedOutcomeRate means operations that currently succeed will start being blocked or gated. Coordinate with affected service owners before promoting, and prefer the recommendedMode rather than jumping straight to enforce.

Intent-level dry run#

To confirm a specific case — "would this intent be approved under the new rules?" — run an intent through POST /intent/simulate. It returns the same decision shape as /intent but mints no token and executes nothing.

Dry-run via the CLI

The flat simulate command (alias intent-simulate) posts to /intent/simulate.

$intended simulate

Dry-run a single intent against the active policy. Mints no token, executes nothing.

--tenantstring *
Tenant id (or configure tenantId / use --session).
--actorstring *
Actor id.
--actionstring
proposedAction to test (default: github.workflow.dispatch).
--riskstring
baseRiskScore to use for the dry run (default: 30).
bash
intended simulate \
  --tenant tenant_acme_prod \
  --actor svc-ci-bot \
  --action "dispatch release workflow" \
  --risk 42

Or call the endpoint directly

bash
curl -X POST https://api.intended.so/intent/simulate \
  -H "Authorization: Bearer $INTENDED_API_KEY" \
  -H "x-tenant-id: tenant_acme_prod" \
  -H "Content-Type: application/json" \
  -d '{
    "simulation": true,
    "tenantId": "tenant_acme_prod",
    "actor": { "id": "svc-ci-bot", "type": "service" },
    "targetSystem": "acme/platform-api",
    "proposedAction": "dispatch release workflow",
    "riskContext": {
      "baseRiskScore": 42,
      "policyCompliant": true,
      "touchesProduction": true,
      "github": { "owner": "acme", "repo": "platform-api", "ref": "refs/heads/main" }
    }
  }'

The response carries the same authorityDecision block as /intent (decision, riskScore, rationale[], gateTrace[]) so you can see which gate produced the outcome — but no authorityDecisionToken and no execution.

Note

POST /intent/simulate dry-runs against the currently active policy, not against an unsaved draft. To preview a draft's effect across many intents, use the impact summary above; use the dry run to spot-check specific intents once the draft is deployed or while you iterate in the console editor.

From simulation to review#

Carry the simulation forward so the reviewer sees what you saw. When you submit the draft for review, pass the simulationRunId that produced the impact summary:

bash
curl -X POST https://api.intended.so/policy/drafts/draft_123/review \
  -H "Authorization: Bearer $INTENDED_API_KEY" \
  -H "x-tenant-id: tenant_acme_prod" \
  -H "Content-Type: application/json" \
  -d '{ "tenantId": "tenant_acme_prod", "submittedBy": "user_admin", "simulationRunId": "sim_abc123" }'

Simulation best practices#

PracticeRationale
Read the impact summary before every promotionSizes the change and surfaces APPROVED → DENIED flips early.
Respect recommendedModeshadow/review ship safely; enforce only once the projection is confident.
Treat lowData: true as a blockerA projection over too little traffic is not evidence.
Spot-check with simulateConfirms the specific intents you care about, gate by gate.
Attach simulationRunId to the reviewGives the reviewer and the auditor the same evidence you used.

Next steps#

Simulate Policy Impact | Intended