Control catalogue

Every control Assay grades against

94 controls. 56 can be answered from an Okta Workflows export, and those are the ones a grade is made from. The other 38 need something an export does not hold, such as who owns a flow or what ran, and are reported as not assessed, never as passed.

Assay · catalogue as shipped in app 5.62 · November 2026

How to read it.

  • Assessed means the control is checked on every flow in an export, by a fixed rule, and its findings count towards the A to E grade.
  • Not assessed means an export cannot prove it either way. The report lists it as not assessed.
  • A control and its narrower, checkable part can both be listed. SEC-001 (no secret is hard-coded) cannot be proved from an export, because a secret can sit where no rule recognises it; SEC-002 is the part a rule can check: fields that look like credentials and hold a value.
  • The catalogue has 13 families. The score in a report combines them into seven dimensions.
  • These are Assay’s own published controls, not an accredited standard. If you think a result is wrong, tell us: a rule that is wrong gets fixed for everyone.

Security (10 of 18 assessed)

ControlWhat it requiresSeverityFrom an export
SEC-001Secrets are not hard-coded
Prevent credentials, tokens and passwords from being embedded in workflow configuration.
CriticalNot assessed
SEC-002Credential-like values are not exposed
Detect credential-shaped input fields with populated values.
CriticalAssessed
SEC-003Custom API calls are reviewed
Custom HTTP/API actions require endpoint, authentication and data-flow review.
HighAssessed
SEC-004Sensitive data exposure is minimised
Sensitive personal/authentication data should be limited to what the workflow needs.
HighNot assessed
SEC-005Sensitive-looking fields are reviewed
Identify sensitive fields by exported key names for manual validation.
MediumAssessed
SEC-006Endpoints are centrally governed
Avoid environment-specific hard-coded endpoints where practical.
MediumAssessed
SEC-007Notification targets are governed
Avoid accidental personal/test email targets in production workflows.
LowAssessed
SEC-008Privileged actions have explicit controls
Access-changing operations should have validation and least-privilege controls.
HighNot assessed
SEC-009Access-changing operations are identified
Inventory privileged/access-changing cards for review.
HighAssessed
SEC-010High-impact actions are auditable
Privileged workflow execution should be observable and reviewable.
HighNot assessed
SEC-011Write actions validate their target
Write/access-changing actions should have visible lookup or precondition logic.
MediumAssessed
SEC-012External data transfer is justified
External calls should have an approved business purpose and data minimisation.
HighNot assessed
SEC-013Authentication method is reviewable
External/API authentication should be identifiable from exported configuration.
HighNot assessed
SEC-014Headers and parameters are reviewed
Custom requests should be checked for authorisation and sensitive headers.
MediumNot assessed
SEC-015Environment separation is reviewable
Production endpoints and test endpoints should not be mixed.
MediumNot assessed
SEC-016Input trust boundaries are explicit
Workflow inputs crossing systems should be validated before privileged actions.
MediumAssessed
SEC-017Model calls are reviewed
Data sent to an external model should be known, minimised and covered by an agreement.
MediumAssessed
SEC-018Model output does not decide access
A generated value should not drive an access change without validation or a human decision.
HighAssessed

Reliability (6 of 11 assessed)

ControlWhat it requiresSeverityFrom an export
REL-001External actions have failure handling
External/API operations should have deliberate error handling.
HighAssessed
REL-002Default finish behaviour is reviewed
Default finish policies should be consciously accepted for critical actions.
MediumAssessed
REL-003Errors are not silently suppressed
Ignore-errors behaviour should not hide material failures.
HighAssessed
REL-004Loops have failure handling
Iterative workflows should handle item-level and aggregate failure.
MediumAssessed
REL-005Critical writes are recoverable
High-impact changes should have retry, compensation or recovery strategy.
HighNot assessed
REL-006Transient failures have retry strategy
Multiple external dependencies should consider bounded retry/backoff.
LowAssessed
REL-007Idempotency is considered
Repeated execution should not create unintended duplicate changes.
MediumNot assessed
REL-008Dependency failures are isolated
One dependency failure should not unnecessarily corrupt unrelated steps.
MediumNot assessed
REL-009Partial completion is handled
Multi-step workflows should define behaviour after partial success.
MediumNot assessed
REL-010Long-running work is controlled
Large loops and external calls should be bounded and operationally predictable.
LowNot assessed
REL-011Model calls have failure handling
Model endpoints rate-limit, time out and return malformed content more often than most connectors.
MediumAssessed

Error Handling (3 of 5 assessed)

ControlWhat it requiresSeverityFrom an export
ERR-001Critical paths have explicit handlers
Critical integration paths should contain deliberate error branches.
HighAssessed
ERR-002Error messages are actionable
Failures should preserve enough context to troubleshoot without exposing secrets.
MediumNot assessed
ERR-003Ignored errors are justified
Every ignored error path should have a documented rationale.
MediumAssessed
ERR-004Error notifications are appropriate
Material failures should surface to an operational owner.
MediumAssessed
ERR-005Recovery paths are tested
Recovery and compensation behaviour should be validated before production use.
LowNot assessed

Governance (3 of 12 assessed)

ControlWhat it requiresSeverityFrom an export
GOV-001Every workflow has a description
Workflow purpose, scope and assumptions should be documented.
LowAssessed
GOV-002Every workflow has an accountable owner
Business/technical ownership should be identifiable.
HighNot assessed
GOV-003Complex logic is commented
Non-obvious decisions and integration assumptions should be explained.
LowAssessed
GOV-004Change history is governed
Workflow changes should be attributable through an external SDLC/change process.
MediumNot assessed
GOV-005Production promotion is controlled
Production workflows should follow an approved promotion process.
MediumNot assessed
GOV-006Dependencies are documented
Cross-flow dependencies should be known and maintained.
MediumNot assessed
GOV-007Business criticality is classified
Critical workflows should be identifiable for stronger controls.
MediumNot assessed
GOV-008Data classification is documented
Sensitive data handling should have a documented classification.
LowNot assessed
GOV-009Dormant flows are reviewed
Unused or obsolete flows should be identified and retired.
MediumNot assessed
GOV-010Logging posture is deliberate
Workflow logging should be enabled or consciously disabled based on risk.
LowAssessed
GOV-011Naming conventions are consistent
Flow and card naming should support maintainability.
LowNot assessed
GOV-012Ownership survives staff changes
Operational knowledge should not depend on one individual.
MediumNot assessed

Observability (1 of 5 assessed)

ControlWhat it requiresSeverityFrom an export
OBS-001Privileged workflows are monitored
High-impact workflows should have monitoring/alerting.
MediumAssessed
OBS-002Failures are detectable
Operational failures should be visible to support teams.
MediumNot assessed
OBS-003Execution evidence is retained
Evidence should support troubleshooting and audit needs.
LowNot assessed
OBS-004External dependency health is visible
Critical dependencies should have operational visibility.
MediumNot assessed
OBS-005Monitoring noise is controlled
Alerts should be actionable and not overwhelm operators.
LowNot assessed

Complexity (4 of 7 assessed)

ControlWhat it requiresSeverityFrom an export
CMP-001Workflow size is controlled
Very large workflows should be decomposed.
MediumAssessed
CMP-002Branching complexity is controlled
Excessive branching should be simplified.
MediumAssessed
CMP-003Nested logic is understandable
Deep decision structures should be minimised.
MediumAssessed
CMP-004Repeated logic is minimised
Duplicated logic should be centralized where practical.
LowNot assessed
CMP-005Loops are bounded
Iteration should have predictable bounds and workload.
MediumNot assessed
CMP-006Helper flows are cohesive
Reusable flows should have clear, narrow responsibilities.
LowNot assessed
CMP-007High structural complexity is remediated
Extreme size/branching should trigger redesign.
HighAssessed

Performance (7 of 7 assessed)

ControlWhat it requiresSeverityFrom an export
PERF-001External calls are minimised
Avoid unnecessary repeated API/network calls.
MediumAssessed
PERF-002Loops avoid chatty integrations
External calls inside loops should be reviewed.
MediumAssessed
PERF-003Batching is considered
Large populations should use batching where supported.
LowAssessed
PERF-004Multiple iteration stages are reviewed
Repeated iteration can amplify runtime and API load.
MediumAssessed
PERF-005Rate limits are considered
Production workflows should account for connector/API throttling.
MediumAssessed
PERF-006Timeout behaviour is understood
External timeout defaults should be known.
LowAssessed
PERF-007Writes inside loops are reviewed
Iterative writes should be assessed for scale and consistency.
MediumAssessed

Architecture (3 of 10 assessed)

ControlWhat it requiresSeverityFrom an export
ARC-001Flow dependencies are understandable
Cross-flow calls should be explicit and maintainable.
MediumNot assessed
ARC-002Dependency depth is controlled
Deep dependency chains increase failure propagation.
MediumNot assessed
ARC-003Standalone flows are intentional
Unreferenced flows should be confirmed as externally triggered or retired.
MediumNot assessed
ARC-004Responsibilities are cohesive
A flow should have a coherent business/technical responsibility.
LowNot assessed
ARC-005Shared logic is centralized
Common logic should not be copied across many flows.
MediumNot assessed
ARC-006Multiple dependencies are reviewed
Flows with many dependencies need stronger change management.
MediumAssessed
ARC-007Unreferenced flows are reviewed
Potentially orphaned flows should be validated.
LowAssessed
ARC-008Helper-flow depth is controlled
Excessive orchestration depth should be avoided.
MediumNot assessed
ARC-009Large flows use decomposition
Large flows should consider helper-flow boundaries.
LowAssessed
ARC-010Critical architecture paths have resilience
Critical dependency chains should have explicit recovery/monitoring.
HighNot assessed

Build Standards (6 of 6 assessed)

ControlWhat it requiresSeverityFrom an export
STD-001Flow names follow the estate's own convention
A dominant naming pattern in the estate should be followed by every flow, so ordering and search work.
MediumAssessed
STD-002Cards are named for what they do
Okta lets every card carry a display name; a flow of default labels has to be re-read to be understood.
MediumAssessed
STD-003One spelling per concept
The same concept spelled two ways breaks search, sorting and every downstream reference.
MediumAssessed
STD-004Names are clean
Stray whitespace and doubled separators in names are invisible in the console and break exact matching.
LowAssessed
STD-005Tables are named to a convention
Table names should say what they hold and follow the estate's convention.
MediumAssessed
STD-006Helper flow inputs and outputs are named for what they carry
A caller sees only these names on the Call Flow card; 'output' or 'Object' says nothing about what goes in or comes back.
LowAssessed

Portability (2 of 2 assessed)

ControlWhat it requiresSeverityFrom an export
CFG-001Tenant-specific identifiers are not hard-coded
An export carries its literal ids; after import they point at the org they came from.
HighAssessed
CFG-002Literal timings and durations are explained
Bare numbers standing for seconds, days or reminder offsets should be named or documented.
MediumAssessed

Intent (2 of 2 assessed)

ControlWhat it requiresSeverityFrom an export
INT-001A flow does what its name says
The name is the contract a reader and an auditor rely on; behaviour that contradicts it is a latent incident.
HighAssessed
INT-002Parked and abandoned objects are retired
Names saying draft, test, old, copy or not-in-use should be removed or renamed once they are real.
LowAssessed

Logic (8 of 8 assessed)

ControlWhat it requiresSeverityFrom an export
LOG-001Inputs are validated before an external or privileged call
Okta's own guidance is to verify required values exist before calling an API.
HighAssessed
LOG-002Timing is not used as synchronisation
A fixed wait before reading what an asynchronous helper writes is a race, not a guarantee.
HighAssessed
LOG-003Table reads are bounded
An unbounded read of a table that may hold 500,000 rows runs against a 100 MB instance limit.
MediumAssessed
LOG-004Every branch has a defined outcome
A path that is empty and has nothing after it ends the flow silently.
MediumAssessed
LOG-005Comparisons use operands of the same type
An ordering comparison against an empty string has no defined meaning.
MediumAssessed
LOG-006Near-duplicate flows are consolidated
Two flows that differ in a few cards drift apart and are fixed once.
LowAssessed
LOG-007A schedule runs on every date it names
Day 31 of a 30-day month does not exist, so the scheduler skips that month's run without saying so.
HighAssessed
LOG-008Lookup results are checked before they are used
A search that finds nothing returns an empty result, not an error, so the next card acts on nothing.
HighAssessed

Platform Fit (1 of 1 assessed)

ControlWhat it requiresSeverityFrom an export
FIT-001Native connector cards are preferred to raw API calls
A raw call to an endpoint that has a native card gives up the connector's auth, pagination and error handling.
MediumAssessed

Okta and Okta Workflows are trademarks of Okta, Inc. Assay is independent of Okta. A grade states configuration facts as of the export’s time and is not a security certification.

See it on a sample estate. Nothing to send.

The live demo holds a public template folder, already assessed.