Discovery and Assurance

Mipiti operates in two distinct reasoning modes over the same data.

Discovery Mode

Discovery is the AI-exploratory phase. When you generate or refine a threat model, you are in Discovery mode.

Discovery gives you a comprehensive starting point in minutes instead of days.

Note: Direct entity edits (add/edit/remove via UI buttons) are not Discovery operations — they are deterministic, create new versions, and preserve existing control mappings. See Working with Models for details.

Assurance Mode

Assurance is the evidence-bound, deterministic phase. It appears on the Assurance page.

Control Alternatives and Defense-in-Depth

Controls generated for a control objective are organized into mitigation groups — alternative paths to satisfy the same CO.

How mitigation groups work

For example, a CO protecting data confidentiality might have:

Group Controls Meaning
1 CTRL-01, CTRL-02 Encrypt at rest + key rotation (both required)
2 CTRL-03 Use hardware security module (alternative path)
CTRL-04 Regular penetration testing (defense-in-depth)

Implementing either Group 1 (CTRL-01 AND CTRL-02) or Group 2 (CTRL-03) mitigates the CO. CTRL-04 is always defense-in-depth.

Defense-in-depth is computed, not stored

When a CO is mitigated via one group, controls in other incomplete groups automatically become defense-in-depth. This status is dynamically calculated based on current implementation state — it is not a fixed label.

Legacy behavior

Models generated before mitigation groups were introduced have all controls with no group assignment. In this case, the system uses legacy behavior: all controls must be implemented for the CO to be mitigated.

Managing groups

The LLM assigns mitigation groups during control generation. You can manually adjust group assignments in the Assurance page using the group override API.

Control Refinement

AI-generated controls are intentionally prescriptive — they specify exact mechanisms (e.g., "use Argon2id with 64 MiB memory cost"). Sometimes the prescribed mechanism doesn't match the implementation (e.g., you use bcrypt, or SameSite=Lax instead of Strict because OAuth requires it).

Control refinement lets you propose a new description with a justification. The platform evaluates whether the mitigation group still collectively satisfies all mapped control objectives after the change:

  1. Propose a new description and justification via refine_control (MCP) or the REST API
  2. The AI evaluator checks each mapped CO — does the group of controls still provide coverage?
  3. If accepted, the control is updated. The original description, justification, and AI assessment are preserved as an audit trail
  4. If rejected, the response includes per-CO reasoning explaining which objectives would lose coverage — use this to adjust and retry

Key properties

Why two modes?

Many tools use AI for everything, including risk evaluation. This means their risk assessments can hallucinate.

Mipiti uses AI where it adds value (creative threat identification) and determinism where correctness matters (coverage evaluation). Auditors can trust the assurance posture because it is not an LLM opinion — it is a mathematical cross-product.

Trust Boundaries and Assumptions

Trust Boundaries

A trust boundary is an architectural boundary where trust transitions occur — for example, "Public internet to API gateway" or "Application server to third-party payment processor." Trust boundaries define which security properties are your responsibility to implement vs. which you must assume about the environment.

Trust boundaries are first-class structural entities. You can add, edit, or remove them via the Overview page or MCP tools (add_trust_boundary, edit_trust_boundary, remove_trust_boundary). Each change creates a new model version with full carry-forward.

What trust boundaries do:

Assumptions

An assumption represents a documented security property that is tracked through attestation rather than proven through code assertions. Typically, assumptions cover properties outside your trust boundary — security obligations upheld by an external party (customer, vendor, operator) that you cannot implement yourself. They can also represent internal environmental properties (infrastructure configuration, operational procedures) that you track through attestation rather than code-level proof.

Examples:

Assumptions are managed on the Assumptions page (add, edit, soft-delete, restore).

CO-Level Mitigation

An assumption can be linked to one or more COs it covers. When linked and attested with a current (non-expired) attestation, the assumption mitigates those COs in the assessment — they show as mitigated_by: assumption rather than at_risk.

This is the correct model for COs where no positioned attacker can reach the asset across any trust boundary: instead of leaving them permanently at_risk (misleading) or fabricating unimplementable controls (wrong), you record the responsible party's obligation and track their attestation.

Control-Level Assumed-By

Some COs span a trust boundary — part is your responsibility, part is external. For these, individual controls within the CO can be marked as externally handled using assumed by (assume_control MCP tool or the Assurance page). A control with assumed_by pointing to an active, attested assumption counts as active for mitigation group completeness — without being marked as implemented by you.

This correctly handles the case where a CO like "Protect session tokens from MITM" requires both TLS enforcement (yours — a control) and TLS termination configuration (vendor's — assumed).

Attestation

An attestation is a timestamped record that the responsible party affirmed an assumption holds:

Field Description
Attested by Identity of the attesting party (name, role, organization)
Statement What was affirmed
Expires at When the attestation must be renewed
Evidence URL Optional link to supporting documentation (SOC 2 report, SLA, deployment config)

Mipiti does not verify attestations — it records them, tracks expiry, and flags gaps. The auditor verifies, same as SOC 2 CUECs (Complementary User Entity Controls).

When an attestation expires, affected COs revert to at_risk until re-attested or covered by controls.

Assumption Lifecycle

State Meaning Assessment impact
Active + attested (current) Responsible party confirmed it holds COs mitigated by assumption
Active + unattested No attestation on record COs at risk
Active + attestation expired Attestation lapsed COs at risk — action required
Soft-deleted Removed but preserved for audit Assumed controls become inert; COs at risk
Restored Reinstated from soft-delete Controls reconnect automatically; re-attestation required

Violation Workflow

When an assumption is violated or its attestation expires, affected COs become at_risk. Four remediation paths:

  1. Re-attest — submit a new attestation with updated expiry (submit_attestation MCP tool or the Assumptions tab on the model detail page)
  2. Restore — if the assumption was soft-deleted and is still valid, restore it and re-attest
  3. Convert to controls — generate controls for the affected COs and retire the assumption linkage (convert_assumption_to_controls MCP tool). For control-level assumptions, assumed_by is cleared and the control reverts to not_implemented. For CO-level assumptions, the LLM generates replacement controls.
  4. Accept risk — formally document that the risk is accepted (see Risk Acceptance)

Risk Acceptance

Some control objectives may remain at risk by deliberate choice — the cost of mitigation outweighs the risk, or the risk is accepted temporarily while controls are being implemented.

Risk acceptance is distinct from assumption-based mitigation:

Risk acceptance is a formal, human-owned decision made through the Assurance page:

  1. Navigate to the Assurance page and run an assessment
  2. In the assessment report, find an at-risk CO and click Accept Risk
  3. Fill in:
    • Owner — the person or team accountable for this risk going forward
    • Justification — why the risk is being accepted (required)
    • Review by — a future date when the acceptance must be re-evaluated (required, must be in the future)
  4. The CO remains at_risk in the assessment but is annotated with the acceptance record

Key properties