Skip to main content

Entity Type Classification — Team Synthesis Report

Supersession note (2026-02-13): This synthesis captures the Round 5 analysis as produced. During plan review, two corrections were applied to the implementation plans (not this document):

  1. human_identity stays in NormalizedNodeType. This synthesis proposes renaming human_identityowner in the NormalizedNodeType enum (lines 147, 157, 166). The corrected plan keeps human_identity as the connector-facing type per the connector contract (05-connectors.md line 334); the platform normalizer maps to internal owner. See Implementation Plan A.1.

  2. Effort re-baselined. This synthesis estimates ~52h (line 348). Code review identified 47 files with 13 identity-assumption locations. The corrected plan estimates ~100h with phased rollback. See Implementation Plan A.6.

For implementation details, always prefer the implementation plan over this synthesis.

Date: 2026-02-13 (Round 5) Team: automation-analysis (6 agents) Core Question: What entity type should Business Rules, Script Includes, REST Messages, OAuth Profiles, Flow Designer Flows, and Scheduled Jobs actually be? The current model classifies ALL as entity_type: "identity". Is this correct?


Team Participants

RoleModelLinesKey Contribution
OAA Specialistopus1,218OAA community connector evidence (0/8 classify artifacts as users), 9-question decision tree
Product Owneropus1,299CISO mental model test, 5-type UX taxonomy, reversal of Round 2 consensus, execution chain visualization redesign
Architectopus1,4579-type hierarchy from scratch, per-artifact identity test (3-part), RUNS_AS vs IS distinction, corrected graph structure
CISOopus1,400NHI count inflation (13-18x), 5 governance categories, compliance control mapping, forensic investigation impact
Integratorsonnet1,073Source system data models, "can execute autonomously" test, dissenting position (keep BRs as identity)
Developersonnet1,397Code impact audit (47 files), implementation plan (168h), TypeScript types, rollback strategy

Total: 7,844 lines across 6 perspectives.


1. Unanimous Agreement: The Current Model Is Wrong

All 6 roles confirm: Classifying ALL automation artifacts as entity_type: "identity" is semantically incorrect.

RolePosition
OAA Specialist"No OAA community connector (0 of 8 reviewed) classifies automation artifacts as Local Users (identities). There is zero precedent."
Product Owner"I explicitly reverse the Round 2 consensus. Label-fixing is a patch on a broken mental model."
Architect"The overloaded autonomous_identity type is a semantic black hole. It conflates things that authenticate with things that define logic."
CISO"Classifying all artifacts as identity inflates NHI counts by 13-18x and undermines compliance reporting."
Integrator"The current model conflates 'can execute autonomously' with 'is executable code'. Script Includes are libraries called BY identities, not identities themselves."
Developer"Every automation artifact is incorrectly typed as entity_type: 'identity'. This is semantically wrong because these are not identities that authenticate."

2. Unanimous Agreement: These Are NOT Identities

All 6 roles agree on at least three artifacts that must be reclassified:

ArtifactAuthenticates?Has own authz?Actor in logs?All 6 agree: Identity?
Script IncludeNoNo (inherits caller)NoNO — code library
REST MessageNoNoNoNO — connection config
OAuth ProfileNo (stores creds, doesn't authenticate)NoNoNO — credential

These three have zero identity properties. Every role agrees they must move out of entity_type: "identity".


3. The Key Disagreement: Business Rules, Flows, Scheduled Jobs

Position A: Reclassify as automation type (5 advocates)

OAA Specialist, Product Owner, Architect, CISO, Developer recommend moving BRs/Flows/Jobs to a new automation entity type.

Their argument: A Business Rule does not authenticate. It does not have credentials. It does not appear as the actor in audit logs. It RUNS IN a system context or caller context, but it IS NOT that context. The RUNS_AS relationship connects the artifact to the identity — they are two separate entities.

ArtifactAuthenticates?Has own authz?Actor in logs?Identity?
Business RuleNoNo (runs in caller/system context)No (trigger, not actor)NO
Flow Designer FlowNoPartially (configured "Run As")PartiallyNO
Scheduled JobNoPartially (configured user)PartiallyNO

Architect's key point: "Multiple automations can delegate to the same identity, and automations have independent lifecycle from the identities they delegate to. This is a delegation relationship, not an identity equivalence."

CISO's key point: "When I ask 'how many NHIs do I have?', I want the answer to be 5-7, not 92. Business Rules are things I MONITOR, not things I GOVERN as identities."

Position B: Keep BRs/Flows/Jobs as autonomous_identity (1 advocate)

Integrator recommends keeping BRs, Flows, and Scheduled Jobs as identities because they CAN execute autonomously and have their own execution context.

Their argument: A Business Rule fires on a database event without human intervention. It runs code. It has an execution context (system or configured user). It produces effects. This is meaningfully different from a Script Include (which is passive code) or a REST Message (which is config data).

ArtifactCan Execute Autonomously?Has Identity Context?Keep as Identity?
Business RuleYes (on event trigger)Yes (runs as user)YES
Flow Designer FlowYes (on trigger)Yes (flow owner)YES
Scheduled JobYes (on schedule)Yes (configured user)YES

Integrator's key point: "The discriminating question isn't 'does it authenticate?' — it's 'can it execute autonomously?' A BR DOES execute autonomously. It just delegates authentication."

Resolution: Team Recommends Position A (5/6)

The majority view is that "can execute autonomously" is not the same as "is an identity." A cron job executes autonomously but nobody calls it an identity. A Roomba executes autonomously but it's not an identity — it uses an identity (WiFi credentials, cloud account) to connect. The BR is the Roomba; the SP is the identity.

The deciding factor: The CISO's governance model. Identities are things you GOVERN (rotate credentials, review access, disable on offboarding). Automations are things you MONITOR (review logic, check execution evidence, trace chains). These are different processes with different controls.


4. Proposed Entity Type Classification

The Identity Test (Decision Tree)

Q1: Does this entity authenticate (have credentials, log in)?
YES → identity
NO ↓

Q2: Does this entity store/manage authentication material?
YES → credential
NO ↓

Q3: Does this entity define executable behavior/logic?
YES → automation
NO ↓

Q4: Does this entity define an outbound connection/endpoint?
YES → connection
NO ↓

Q5: Is this entity data that gets read/written/protected?
YES → resource
NO → Review (may need new type)

Per-Artifact Classification (Team Consensus)

ArtifactCurrent TypeProposed TypeWhy
Service PrincipalidentityidentityAuthenticates, has roles, actor in logs
OAuth App RegistrationidentityidentityAuthenticates, has credentials
Machine AccountidentityidentityAuthenticates with credentials
Integration UseridentityidentityAuthenticates to ServiceNow
Business RuleidentityautomationDefines execution logic, does not authenticate
Script IncludeidentityautomationReusable code library, does not authenticate
Flow Designer FlowidentityautomationOrchestration artifact, does not authenticate
Scheduled JobidentityautomationTime-triggered automation, does not authenticate
REST MessageresourceconnectionOutbound HTTP endpoint configuration
OAuth ProvideridentitycredentialStores authentication material (token endpoint, client_id)
OAuth ProfileidentitycredentialStores client secret, token configuration
Incident TableresourceresourceData that gets read/written (unchanged)
Graph API EndpointresourceresourceExternal API target (unchanged)
Role AssignmentrolerolePermission grouping (unchanged)
Permission/ScopepermissionpermissionIndividual capability (unchanged)
Human Userhuman_identityownerHuman who owns/created artifacts (PO proposes rename)

Proposed NormalizedNodeType Enum

export type NormalizedNodeType =
| "identity" // Things that authenticate: SP, OAuth App, machine account, integration user
| "automation" // Things that define execution logic: BR, SI, Flow, Scheduled Job
| "connection" // Outbound integration configs: REST Message, SOAP Message, HTTP Connection
| "credential" // Authentication material: OAuth Provider/Profile, API Key, Certificate
| "owner" // Human users who own/create things (renamed from human_identity)
| "role" // Permission groupings (unchanged)
| "permission" // Individual capabilities (unchanged)
| "resource" // Data objects, tables, APIs (unchanged)
| "execution_evidence"; // Proof of execution (unchanged)

Changes from current enum:

  • autonomous_identity → split into identity + automation + connection + credential
  • human_identity → renamed to owner (PO recommendation)
  • role, permission, resource, execution_evidence → unchanged

Subtype System

// Things that authenticate
export type IdentitySubtype =
| "service_principal"
| "oauth_app"
| "machine_account"
| "integration_user"
| "system_execution"; // ServiceNow "system" context

// Things that define execution logic
export type AutomationSubtype =
| "business_rule"
| "script_include"
| "flow_designer_flow"
| "scheduled_job"
| "event_script"
| "transform_map";

// Outbound connection configs
export type ConnectionSubtype =
| "rest_message"
| "rest_method" // individual HTTP method within a REST message
| "soap_message"
| "http_connection";

// Authentication material
export type CredentialSubtype =
| "oauth_provider"
| "oauth_profile"
| "api_key"
| "certificate"
| "client_secret";

5. Corrected AzureGraphRouter Execution Chain

Current (Wrong)

[identity:business_rule] AzureGraphRouter
--CALLS--> [identity:system_execution] AzureGraphRouterSI
--CALLS--> [resource] Azure Graph REST Message
--AUTHENTICATES_TO--> [identity] OAuth Profile
--AUTHENTICATES_TO--> [identity:service_principal] SP-AzureGraph

Proposed (Correct)

[automation:business_rule] AzureGraphRouter
--CALLS--> [automation:script_include] AzureGraphRouterSI
--INVOKES--> [connection:rest_message] Azure Graph REST
--USES--> [credential:oauth_profile] AzureGraphOAuth
--AUTHENTICATES_AS--> [identity:service_principal] SP-AzureGraph
--HAS_ROLE--> [role] Directory.Read.All
--GRANTS--> [permission] User.Read.All
--APPLIES_TO--> [resource] Graph API /users

What this communicates:

  • The chain starts with an automation (not an identity)
  • It flows through code (automation), connection config, credential
  • Only at the end does it reach an actual identity (the SP)
  • Each node's type tells you what it IS, not just what it does

Edge Type Updates

EdgeFrom TypeTo TypeMeaning
CALLSautomationautomationAutomation invokes code
INVOKESautomationconnectionCode uses connection config
USESconnectioncredentialConnection uses auth material
AUTHENTICATES_AScredentialidentityCredential represents this identity
RUNS_ASautomationidentityAutomation executes in this identity's context
TRIGGERS_ONautomationresourceAutomation fires when resource changes
HAS_ROLEidentityroleIdentity has this role (unchanged)
GRANTSrolepermissionRole grants this permission (unchanged)
APPLIES_TOpermissionresourcePermission applies to this resource (unchanged)
OWNED_BYanyownerEntity owned by this human (unchanged)
CREATED_BYanyownerEntity created by this human (unchanged)

6. Impact on Key Metrics (CISO Assessment)

NHI Count

MetricCurrent (Wrong)Proposed (Correct)
"How many NHIs?"92 (inflated by artifacts)~8-15 (only authenticating entities)
"How many automations?"Must filter subtypesDirect query: entity_type: "automation"
"How many credentials to rotate?"Mixed in with identitiesDirect query: entity_type: "credential"
"What connects externally?"Must trace execution pathsDirect query: entity_type: "connection"

Compliance Reporting (CISO)

ControlCurrent ProblemAfter Reclassification
CC6.1 (Access Controls)Identity count inflated 13-18x in reportsAccurate identity inventory
CC7.1 (Monitoring)Automation monitoring mixed with identity governanceSeparate governance processes
A.5.9 (Asset Inventory)Asset types conflatedClean asset categories (identities, automations, credentials)
SOX ITGCNHI inventory unreliableAccurate NHI count for attestation

7. OAA Export Mapping (OAA Specialist)

SecurityV0 TypeOAA Export EntityFidelity
identitylocal_userHIGH — direct mapping
automationresource (type: automation)HIGH — follows OAA resource pattern
connectionresource (type: connection)HIGH — follows OAA resource pattern
credentialCustom property on local_userMEDIUM — no OAA credential entity
rolelocal_roleHIGH — direct mapping
permissioncustom_permissionHIGH — direct mapping
resourceresourceHIGH — direct mapping

Key validation: The OAA Specialist confirmed that in ALL 8 community connectors reviewed (GitHub, GitLab, Jira, PagerDuty, Bitbucket, Slack, Rollbar, Looker), automation-like artifacts are ALWAYS classified as Resources, NEVER as Local Users. The proposed reclassification aligns with industry practice.


8. The Dissenting Position (Documented)

The Integrator disagrees on Business Rules, Flows, and Scheduled Jobs (but agrees on Script Includes, REST Messages, and OAuth Profiles).

Integrator's argument: The discriminating question should be "can it execute autonomously?" not "does it authenticate?" BRs fire on events, Flows trigger on conditions, Scheduled Jobs run on timers. They have execution agency. Script Includes do not.

Integrator's proposal: Minimal change — add one new type (code_artifact) for Script Includes, move OAuth Profiles to credential, keep everything else as-is. This is 16 hours of work vs. the majority's larger reclassification.

Counter-arguments from majority:

  • Architect: "A cron job executes autonomously. A thermostat executes autonomously. Autonomous execution is not identity. Identity is about authentication and authorization context."
  • CISO: "Identities are things I GOVERN (rotate, review, disable). Automations are things I MONITOR (trace, audit, assess). Different processes, different entity types."
  • Product Owner: "If BRs stay as identity, the CISO's identity page still shows 30+ Business Rules mixed with 8 actual service accounts. The UX problem persists."

9. Compatibility with Round 3/4 Conclusions

execution_chains Collection (Round 3)

The reclassification is fully compatible. The execution_chains collection stores entity_refs with role annotations. The entity references work regardless of type:

entity_refs: [
{ entity_id: "uuid-br", role: "entry_point" }, // was identity, now automation
{ entity_id: "uuid-si", role: "code_component" }, // was identity, now automation
{ entity_id: "uuid-rest", role: "outbound_target" }, // was resource, now connection
{ entity_id: "uuid-oauth", role: "auth_credential" }, // was identity, now credential
{ entity_id: "uuid-sp", role: "destination_identity" } // stays identity
]

The chain builder BFS already traverses by edge type, not entity type. Reclassification changes the entity_type field but not the graph topology.

OAA Export (Round 4)

Reclassification makes OAA export cleaner:

  • identity → OAA local_user (direct, no filtering needed)
  • automation → OAA resource (natural OAA mapping)
  • No need to filter "identity but not really identity" artifacts from SCIM exports

10. Implementation Estimate

Product Owner recommendation: Do this BEFORE Round 3 Phase 1 (execution_chains), so chains reference correctly-typed entities from the start.

TaskEffortDescription
Update NormalizedNodeType enum + subtypes4hTypeScript type changes
Update connector transformer.py8hEmit correct types for each artifact
Update StorageAdapter + queries8hHandle new types in storage layer
Update path materializer4hTraverse mixed types correctly
Update finding evaluator4hAdjust type-based finding logic
Update UI entity pages8hSeparate Identities/Automations/Credentials pages
Update tests12hFix existing + add new tests
Update architecture docs4h01-data-model.md, 03-database.md
Total~52h~1.5 weeks

11. Answer to the Core Question

"What entity type should Business Rules, Script Includes, REST Messages, etc. be?"

Team Answer:

ArtifactCorrect TypeDecision Basis
Business RuleautomationDefines execution logic; does not authenticate
Script IncludeautomationCode library; does not authenticate
Flow Designer FlowautomationOrchestration artifact; does not authenticate
Scheduled JobautomationTime-triggered artifact; does not authenticate
REST MessageconnectionOutbound endpoint config; not code or identity
OAuth ProvidercredentialStores authentication material
OAuth ProfilecredentialStores client secret and token config
Service PrincipalidentityAuthenticates, has roles, actor in logs

The decision tree is simple: Does it authenticate? → identity. Does it store auth material? → credential. Does it define logic? → automation. Does it define a connection? → connection. Is it data? → resource.

What Changed from Previous Rounds

RoundPosition on BR/SI classification
Round 1Keep as identity, fix UI labels
Round 2Keep as identity, fix UI labels (unanimous)
Round 3Keep as identity, add execution_chains (didn't question typing)
Round 4Keep as identity internally, project as resource for OAA (no type changes)
Round 5Reclassify: automation, connection, credential (5/6 majority)

The shift happened because the founder removed the migration cost constraint. Rounds 1-4 optimized for stability. Round 5 optimized for correctness.


12. Files Produced (Round 5)

FileRoleLinesKey Topics
05-entity-typing-oaa-specialist.mdOAA Specialist1,218Community connector evidence, 9-question decision tree, dual-nature debunked
05-entity-typing-product-owner.mdProduct Owner1,299CISO mental model, 5-type UX taxonomy, Round 2 reversal, chain visualization
05-entity-typing-ciso.mdCISO1,400NHI count inflation, 5 governance categories, compliance mapping, forensic impact
05-entity-typing-architect.mdArchitect1,4579-type hierarchy, per-artifact identity test, RUNS_AS vs IS, corrected graph
05-entity-typing-integrator.mdIntegrator1,073Source system models, "can execute" test, dissent: keep BRs as identity
05-entity-typing-developer.mdDeveloper1,397Code impact (47 files), TypeScript types, 168h impl plan, rollback strategy
05-entity-typing-synthesis.mdLeadThis document

Round 5 analysis complete. 6 perspectives, ~7,844 lines. Unanimous: current model is wrong. 5/6 majority: reclassify BRs/SIs/Flows/Jobs as automation, REST Messages as connection, OAuth Profiles as credential. 1 dissent: Integrator keeps BRs as identity. Estimated effort: ~52h (~1.5 weeks). Recommended: do this BEFORE execution_chains implementation.