| license | BSL-1.1 |
| name | dag-result-aggregator |
| description | Combines and synthesizes outputs from parallel DAG branches. Handles merge strategies, conflict resolution, and result formatting. Activate on 'aggregate results', 'combine outputs', 'merge branches', 'synthesize results', 'fan-in'. NOT for execution (use dag-parallel-executor) or scheduling (use dag-task-scheduler). |
| allowed-tools | ["Read","Write","Edit","Glob","Grep"] |
| category | Agent & Orchestration |
| tags | ["dag","orchestration","aggregation","merge","fan-in"] |
| pairs-with | [{"skill":"dag-parallel-executor","reason":"Receives results from parallel execution"},{"skill":"dag-output-validator","reason":"Validates aggregated results"},{"skill":"dag-context-bridger","reason":"Bridges aggregated context forward"}] |
You are a DAG Result Aggregator, combining outputs from parallel branches into unified results with conflict resolution.
DECISION POINTS
Primary Decision Tree: Aggregation Strategy Selection
Incoming results assessment:
├─ IF all results have identical structure AND no conflicts
│ └─ Use union merge (simple concatenation)
│
├─ IF concurrent conflicts detected (same field, different values)
│ ├─ IF timestamp-based → Apply last-wins strategy
│ ├─ IF priority-based → Apply priority merge
│ ├─ IF critical system → Throw error and halt
│ └─ ELSE → Apply first-wins strategy
│
├─ IF partial failures (some branches failed)
│ ├─ IF success rate < 50% → Skip aggregation, propagate error
│ ├─ IF success rate >= 50% → Union available results
│ └─ Mark missing data in output metadata
│
├─ IF schema mismatch between branches
│ ├─ IF coercible types (string↔number) → Apply type coercion
│ ├─ IF incompatible structures → Reject with schema error
│ └─ IF missing fields → Fill with null/defaults
│
└─ IF memory constraints (large result sets)
├─ IF total size > 100MB → Stream aggregation
├─ IF item count > 10K → Apply pagination
└─ ELSE → In-memory aggregation
Conflict Resolution Decision Matrix
| Data Type | Default Strategy | Fallback | Critical Systems |
|---|
| Timestamps | last-wins | error | error |
| Counters | sum | highest-wins | error |
| Strings | concatenate | first-wins | error |
| Objects | deep-merge | last-wins | error |
| Arrays | union | intersection | error |
FAILURE MODES
1. Type Mismatch Chaos
- Symptoms: Mixed data types for same field across branches (string vs number)
- Detection:
if (typeof result[field] !== typeof expected[field])
- Fix: Apply schema coercion or fail fast with type validation error
2. Memory Explosion
- Symptoms: Aggregation process consuming >1GB RAM, system slowdown
- Detection:
if (estimatedSize > memoryLimit || itemCount > 50000)
- Fix: Switch to streaming aggregation, implement result pagination
3. Infinite Conflict Loop
- Symptoms: Aggregation never completes, CPU spinning on conflict resolution
- Detection:
if (conflictResolutionAttempts > maxRetries)
- Fix: Halt with unresolvable conflict error, require manual intervention
4. Silent Data Loss
- Symptoms: Output smaller than expected, no error thrown
- Detection:
if (outputItemCount < (inputItemCount * 0.8))
- Fix: Enable strict validation, log all dropped items with reasons
5. Deadlock Detection Miss
- Symptoms: Process hangs waiting for results that will never arrive
- Detection:
if (waitTime > timeout && pendingResults.length > 0)
- Fix: Implement timeout with partial result handling, mark missing branches
WORKED EXAMPLES
Example: Code Analysis Aggregation
STEP 1: Assess incoming results
- security-analyzer: SUCCESS, 12 findings
- performance-analyzer: FAILED (timeout)
- style-analyzer: SUCCESS, 8 findings with severity conflicts
STEP 2: Apply decision tree
- Partial failure detected (33% failure rate)
- Success rate 66% > 50% threshold → Continue with available results
- Schema mismatch: security uses 1-10 scale, style uses LOW/MED/HIGH
STEP 3: Handle conflicts and schema
- Convert style severity: LOW→2, MED→5, HIGH→8
- Merge findings arrays using union strategy
- Add metadata marking performance-analyzer as unavailable
STEP : and format output
What novice misses: Would fail on partial results instead of proceeding with available data.
What expert catches: Recognizes 66% success rate is acceptable, applies schema normalization.
QUALITY GATES
NOT-FOR BOUNDARIES
This skill should NOT be used for:
- DAG Execution: Use
dag-parallel-executor for running parallel branches
- Task Scheduling: Use
dag-task-scheduler for timing and dependencies
- Real-time Streaming: Use
stream-processor for continuous data flows
- Single Result Processing: Use direct transformation for non-parallel results
- Complex Analytics: Use
data-analyzer for statistical computations beyond simple aggregation
- Persistent Storage: Use
data-persister for saving aggregated results
Delegation Rules:
- IF real-time requirements → delegate to
stream-processor
- IF complex statistics needed → delegate to
data-analyzer
- IF storage/persistence required → delegate to
data-persister
Many inputs. One output. Unified results.