Risk OS Red Try Stoa

stoa export --assurance

Enterprise assurance frameworks — insurance underwriting, AIUC-1 (the AI agent trust standard), vendor security reviews — ask for data across 18 areas, split across three source layers: scanned (derivable from code), declared (human-supplied business facts, see Declarations), and ingested (external artifacts — eval results, incident logs — Stoa reserves structured slots for these but doesn't generate them).

The 18 areas are grouped under AIUC-1's six standard categories (Data & Privacy, Security, Safety, Reliability, Accountability, Society), plus a seventh Stoa-only group — insurance-specific exposure (business exposure, economic authority, claims evidence) — that AIUC-1 doesn't cover, because AIUC-1 is a trust standard, not an insurance standard. This grouping is a display header, not an AIUC-1 certification claim; certification requires their accredited-auditor process.

stoa export --assurance walks all 18 areas and emits a packet where every row is tagged with exactly one status — never silently omitted:

StatusMeaning
scannedDerived from the scan, with a rule id and file:line.
declaredFrom stoa-declared.toml, with the exact key path.
ingestedA pointer from the evidence.* block (kind, ref, date).
not_providedExplicitly listed as a gap — an assurance reviewer needs to see what's missing as much as what's covered.

Usage

stoa export --assurance [REGISTRY] [--format json|md] [--out PATH]

the current directory fresh.

stoa scan .
stoa export --assurance stoa-registry.json --format md --out assurance.md

The 18 areas

#GroupAreaLayer(s)
1IndexAI inventoryscanned + declared
2IndexHistorical evidenceingested
3A — Data & PrivacyData accessscanned + declared
4B — SecurityPermissionsscanned
5B — SecurityDependenciesscanned
6B — SecurityTechnical controlsscanned
7B — SecuritySecurity testingingested
8C — SafetyAutonomyscanned (inferred) + declared (intent)
9C — SafetySafety evaluationdeclared + ingested
10D — ReliabilityReliability scoresscanned
11E — AccountabilityAccountabilitydeclared + ingested
12E — AccountabilityMonitoringingested (+ CTRL004 scanned)
13E — AccountabilityContractsdeclared + ingested
14E — AccountabilityVendor due diligenceingested
15F — SocietySocietal impactdeclared (attestation only — never scored)
16G — Insurance-specificBusiness exposuredeclared
17G — Insurance-specificEconomic authoritydeclared + scanned (enforcement check)
18G — Insurance-specificClaims evidenceingested (reserved observed provenance — see below)

Groups A–F mirror AIUC-1's own six categories, split further where AIUC-1 itself draws a distinction Stoa's data already supports — e.g. AIUC-1 separates third-party adversarial testing (Security) from third-party harmful-output testing (Safety), so those are two areas (7 and 9), not one. Group G has no AIUC-1 equivalent: it's the loss-exposure data an insurance submission needs that a general agent-trust standard was never built to ask for.

Most per-agent areas are self-explanatory tables (one row set per scanned agent); area 15 (Societal impact) and area 2 (Historical evidence) are repository-level, as are most of Group G.

Area 18 (Claims evidence) is deliberately all not_provided today: Stoa is a static scanner and has no runtime traces to report. The observed edge-provenance value (already reserved in the architecture graph and SCHEMA.md) is where a future runtime-trace overlay would surface here. Area 15 (Societal impact) is also deliberately never scored — see dimensions.md for why Stoa treats AIUC-1's Society category as attestation-only.

Contradictions section

Every packet leads with a dedicated Contradictions section — every DECL001-DECL007 finding from the current scan, with both evidence sides (code + declared) inline. This is the headline for a reviewer: it's the one thing a self-attested questionnaire can't produce on its own.

Determinism

The packet body is deterministic — identical registry input produces an identical areas/contradictions output. The only place wall-clock or caller-supplied values appear is the header block (git_sha, scan_timestamp), matching the rest of Stoa's no-timestamps-in-content invariant.

Sample packet (Markdown, trimmed)

## Stoa · Assurance Packet — support-desk

`a1b2c3d` · scanned 2026-07-25T12:00:00Z · Stoa `0.3.0` · registry schema `1.2` · 9 agent(s) · 1 contradiction(s)

### ⚠️ Contradictions (1)

| Rule | Severity | Title | Code | Declared |
|---|---|---|---|---|
| DECL001 | critical | Declared autonomy contradicts inferred autonomy | `agents/billing_executor.py:14` | `agents."509c9ce8c11d".autonomy_intent` |

## Index

### Area 1 — AI inventory (scanned + declared)
...

## G — Insurance-Specific Exposure (beyond AIUC-1)

### Area 16 — Business exposure (declared)

| Field | Status | Evidence |
|---|---|---|
| industries | 📝 declared | `business.industries` |
| revenue | ⬜ not_provided | — |
...

--sign

No signing mechanism exists in Stoa today. This is a documented extension point (# TODO(assurance-sign) in src/stoa/cli.py), not a built feature — deliberately deferred rather than half-implemented.