Docs

Dart: Simulation

Check who can do what in your project without changing anything with the Dart and Flutter SDK.

Updated Oct 24, 2026

Check who can do what in your project without changing anything. Every call runs as the client's signed-in user, so your project's policies and row-level security apply. Types and members are listed in source order; each one links to its HTTP endpoint where it maps to one.

#Types and members

SovariaSimulation

Who can do what in the live project — as visitors, the app's users and the team — with nothing written (Echo's simulation API). Call it as a team member (a console or CLI session), not as an app user. A full run uses one simulation from the plan's allowance and runs one at a time per organization (409 SIMULATION_RUN_IN_PROGRESS); a filter that covers at most 25 request types is a free single-request check. Only the manifest_id from discover is sent, never manifest content. Same surface as Swift/Kotlin.

class SovariaSimulation

SovariaSimulation.SovariaSimulation

Create an instance.

SovariaSimulation(this._t)

SovariaSimulation.pollInterval

How often a background run is polled, and for how long (a run is stopped server-side after 10 minutes).

Duration pollInterval

SovariaSimulation.timeout

A property.

Duration timeout

SovariaSimulation.Function

Waits between polls (tests replace it).

Future<void> Function(Duration) sleep

SovariaSimulation.discover

What a run would test (user types, resources, rules), trimmed to what you may read.

Future<Map<String, Object?>> discover()

SovariaSimulation.run

Run the simulation.

Future<Map<String, Object?>> run({String? manifestId, Map<String, String>? filter})

With a filter (resource, action, role) the answer comes back at once; a full run starts in the background and is polled until it is complete (or throws when it failed).

SovariaSimulation.change

Try a change before making it; nothing is written ({'kind': 'policy', …} or {'kind': 'sql', 'sql': …}).

Future<Map<String, Object?>> change(Map<String, Object?> payload)

SovariaSimulation.plan

Trace planned operations through every layer without sending them.

Future<Map<String, Object?>> plan(Map<String, Object?> payload)

SovariaSimulation.listRuns

The project's runs, newest first (limit 1–100).

Future<Map<String, Object?>> listRuns({int? limit, int? offset})

SovariaSimulation.quota

Real runs used and allowed today (UTC) and this month.

Future<Map<String, Object?>> quota()

SovariaSimulation.listIntended

Outcomes the team marked as intended.

Future<Map<String, Object?>> listIntended()

SovariaSimulation.markIntended

Mark an outcome as intended (outcome ALLOW or DENY).

Future<Map<String, Object?>> markIntended({required String role, required String action, required String resource,
        required String outcome, String? note})

Needs policies.write.

SovariaSimulation.unmarkIntended

Remove an intended-outcome mark.

Future<Map<String, Object?>> unmarkIntended(String markId)

SovariaSimulation.topology

Callers, gateway checks, sign-in, resources and connectors.

Future<Map<String, Object?>> topology()

SovariaSimulation.limits

Every limit the project lives under, with its value and how it is counted.

Future<Map<String, Object?>> limits()

SovariaSimulation.integrationRun

One integration flow under a programmed outcome: modelled (free) or sealed (real code path, recorded).

Future<Map<String, Object?>> integrationRun({required String connectorId, required String flowId,
        String outcome = "", String mode = ""})

SovariaSimulation.drillsRun

The security drills judged from the project's configuration, with an optional what-if draft.

Future<Map<String, Object?>> drillsRun({List<String>? drillIds, Map<String, Object?>? overrides})

SovariaSimulation.runArtifacts

What a run's sealed send points would have sent (secrets masked).

Future<Map<String, Object?>> runArtifacts(String runId)

SovariaSimulation.getRun

One run with every case's result.

Future<Map<String, Object?>> getRun(String runId)

SovariaSimulation.compareRuns

What changed between two runs: regressions, improvements, new failures.

Future<Map<String, Object?>> compareRuns(String targetRunId, String baselineRunId)