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).
Scanned 9/11/2026
Install to Claude Code
npx -y skills add curiositech/windags-skills --skill dag-result-aggregator --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Dag Result Aggregator?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/curiositech-dag-result-aggregator)More formats (shields.io, HTML) on the badges page.
---
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**
```typescript
// Scenario: 3 parallel code analyzers (security, performance, style)
// Input: Mixed success/failure, conflicting severity scores
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 4: Validate and format output
```json
{
"aggregationId": "code-analysis-001",
"data": {
"findings": [
{"type": "security", "severity": 8, "message": "SQL injection risk"},
{"type": "style", "severity": 5, "message": "Long method detected"}
]
},
"stats": {
"totalInputs": 3,
"successfulInputs": 2,
"failedInputs": 1,
"conflictsResolved": 0
},
"partialResults": ["performance-analyzer"]
}
```
**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
- [ ] All successful branch results included in output
- [ ] Schema validation passes on aggregated result
- [ ] Conflicts documented with resolution strategy applied
- [ ] Deduplication applied where configured (no duplicate IDs)
- [ ] Output size within memory limits (<100MB default)
- [ ] Partial failure handling documented in metadata
- [ ] Type coercion applied consistently across branches
- [ ] Provenance tracking shows which branch contributed what data
- [ ] Timeout boundaries respected (no infinite waits)
- [ ] Error propagation configured (fail-fast vs best-effort)
## 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.Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!