Architecture note

ROMA Role Mapping v1

Conceptual mapping of Recursive Open Meta-Agents onto this platform. Documentation only — no recursive runtime, no new workflow entry point. Version 1.0.0.

Product path

Default — Research → Synthesis

Fixed two-step governed chain. Goal in, protocol brief out. Atomize is skipped; the plan is the template; executors are registry cards; synthesize is the aggregator.

implemented · research-synthesis

Future

Advanced — ROMA recursive (future)

Optional later mode: atomize → plan a requirement DAG → execute via the same registry selection → aggregate. Not a replacement for the default product path. No entry point exists in this version.

not implemented · roma-recursive

Role mapping

ROMA roles attach to components that already exist. They do not introduce a second orchestrator.

ROMA rolePlatform mappingStatus

Atomizer

atomizer

Orchestrator planning decision (atomic vs composite)

Would decide whether a goal is a single governed task or a composite graph. Today that decision is implicit: Research → Synthesis is always a two-step chain. No atomizer runtime is invoked.

mapped

Planner

planner

Orchestrator plan generation and/or a planner-capable Agent Card

Would emit a DAG of capability requirements (not agent IDs). Today the plan is the Research → Synthesis template: research then synthesize. A planner card may exist later; it must not select executors.

mapped

Executor

executor

Registered Agent Cards selected by capability

The executor pool is the Agent Card registry. Selection uses current hard filters (active, capability, endpoint, privacy, MCP tool policy), then scoring. literature-research and protocol-synthesis are the default research and synthesis executors.

mapped

Aggregator

aggregator

Synthesis-capable agents / aggregation step

Today this is the synthesize step (requirements synthesis, briefing) and parallel aggregation when mode is synthesize. protocol-synthesis is the preferred specialist. Nested aggregation loops are out of scope.

mapped

Verifier

verifier

Policy, unified audit, or a dedicated verifier Agent Card

Optional future role. Current stand-ins are MCP tool policy, privacy filters, and the unified audit trail. No verifier agent is required for the default path.

future

Executor population

Executors in any future ROMA-style tree must be selected from the existing Agent Card registry using the current hard filters, scoring, privacy, and MCP tool policy. The planner proposes requirements; it does not pick agent IDs.

Default executors stay literature-research.agent for research and protocol-synthesis.agent for synthesis, when both are active and privacy-compatible.

Future audit correlation

Placeholders only. This phase does not add audit event types. Reuse the unified 1.0 envelope when a recursive runtime lands.

  • correlation.nodeId + parentNodeId

    Hierarchical parent–child links in a future task tree

    correlation.nodeId exists on DAG events; parentNodeId is not written

  • plan → execute → aggregate sequence

    Ordered ROMA stages on one run

    CHAIN_STEP_* / WORKFLOW_* cover the two-step chain; no ATOMIZED / PLANNED / AGGREGATED types

  • subject.id + subject.version

    Preserve agentId@version on every executor step

    Already recorded on SELECTED, RESULT_RECEIVED, and workflow step views

  • correlation.chainId | dagId | parallelId | stepId | branchId

    Join executor work back to the parent graph

    Present on the unified 1.0 envelope; reuse rather than invent a parallel id scheme

Non-goals for this phase

  • Recursive task tree runtime
  • Automatic goal decomposition
  • Nested aggregation loops
  • New workflow entry points (no submitRoma)
  • Changes to Research → Synthesis defaults
  • New audit event types in this phase
  • Trust learning or live MCP runtime
  • Scoring or privacy-filter changes

Canonical JSON

Source of truth for this note.

{
  "$schema": "https://agentcard.schema/roma-role-mapping.v1",
  "id": "roma.role-mapping.v1",
  "title": "ROMA Role Mapping v1",
  "version": "1.0.0",
  "defaultMode": "research-synthesis",
  "advancedMode": "roma-recursive",
  "advancedImplemented": false,
  "executorRule": "Executors in any future ROMA-style tree must be selected from the existing Agent Card registry using the current hard filters, scoring, privacy, and MCP tool policy. The planner proposes requirements; it does not pick agent IDs.",
  "roles": [
    {
      "role": "atomizer",
      "title": "Atomizer",
      "platform": "Orchestrator planning decision (atomic vs composite)",
      "detail": "Would decide whether a goal is a single governed task or a composite graph. Today that decision is implicit: Research → Synthesis is always a two-step chain. No atomizer runtime is invoked.",
      "status": "mapped"
    },
    {
      "role": "planner",
      "title": "Planner",
      "platform": "Orchestrator plan generation and/or a planner-capable Agent Card",
      "detail": "Would emit a DAG of capability requirements (not agent IDs). Today the plan is the Research → Synthesis template: research then synthesize. A planner card may exist later; it must not select executors.",
      "status": "mapped"
    },
    {
      "role": "executor",
      "title": "Executor",
      "platform": "Registered Agent Cards selected by capability",
      "detail": "The executor pool is the Agent Card registry. Selection uses current hard filters (active, capability, endpoint, privacy, MCP tool policy), then scoring. literature-research and protocol-synthesis are the default research and synthesis executors.",
      "status": "mapped"
    },
    {
      "role": "aggregator",
      "title": "Aggregator",
      "platform": "Synthesis-capable agents / aggregation step",
      "detail": "Today this is the synthesize step (requirements synthesis, briefing) and parallel aggregation when mode is synthesize. protocol-synthesis is the preferred specialist. Nested aggregation loops are out of scope.",
      "status": "mapped"
    },
    {
      "role": "verifier",
      "title": "Verifier",
      "platform": "Policy, unified audit, or a dedicated verifier Agent Card",
      "detail": "Optional future role. Current stand-ins are MCP tool policy, privacy filters, and the unified audit trail. No verifier agent is required for the default path.",
      "status": "future"
    }
  ],
  "modes": [
    {
      "id": "research-synthesis",
      "title": "Default — Research → Synthesis",
      "product": "default",
      "implemented": true,
      "summary": "Fixed two-step governed chain. Goal in, protocol brief out. Atomize is skipped; the plan is the template; executors are registry cards; synthesize is the aggregator."
    },
    {
      "id": "roma-recursive",
      "title": "Advanced — ROMA recursive (future)",
      "product": "advanced-future",
      "implemented": false,
      "summary": "Optional later mode: atomize → plan a requirement DAG → execute via the same registry selection → aggregate. Not a replacement for the default product path. No entry point exists in this version."
    }
  ],
  "auditPlaceholders": [
    {
      "field": "correlation.nodeId + parentNodeId",
      "purpose": "Hierarchical parent–child links in a future task tree",
      "today": "correlation.nodeId exists on DAG events; parentNodeId is not written"
    },
    {
      "field": "plan → execute → aggregate sequence",
      "purpose": "Ordered ROMA stages on one run",
      "today": "CHAIN_STEP_* / WORKFLOW_* cover the two-step chain; no ATOMIZED / PLANNED / AGGREGATED types"
    },
    {
      "field": "subject.id + subject.version",
      "purpose": "Preserve agentId@version on every executor step",
      "today": "Already recorded on SELECTED, RESULT_RECEIVED, and workflow step views"
    },
    {
      "field": "correlation.chainId | dagId | parallelId | stepId | branchId",
      "purpose": "Join executor work back to the parent graph",
      "today": "Present on the unified 1.0 envelope; reuse rather than invent a parallel id scheme"
    }
  ],
  "nonGoals": [
    "Recursive task tree runtime",
    "Automatic goal decomposition",
    "Nested aggregation loops",
    "New workflow entry points (no submitRoma)",
    "Changes to Research → Synthesis defaults",
    "New audit event types in this phase",
    "Trust learning or live MCP runtime",
    "Scoring or privacy-filter changes"
  ]
}

Product path stays Research → Synthesis. Generic compose remains on Orchestrate.