194 lines
6.0 KiB
YAML
194 lines
6.0 KiB
YAML
# Independent Parallel Tracks Pattern
|
|
#
|
|
# This pipeline demonstrates two fully independent analysis tracks
|
|
# running simultaneously and converging at a final merge step.
|
|
# Unlike the fan-out pattern (used in ops-pr-review.yaml), these tracks
|
|
# have NO shared upstream step — they start independently and converge
|
|
# only at the end.
|
|
#
|
|
# Execution flow:
|
|
#
|
|
# quality-scan security-scan ← both start immediately (no deps)
|
|
# │ │
|
|
# quality-detail security-detail ← each track continues independently
|
|
# └────────┬─────────┘
|
|
# merge ← converges results from both tracks
|
|
|
|
kind: WavePipeline
|
|
metadata:
|
|
name: audit-dual
|
|
description: "Parallel code-quality and security analysis with independent tracks"
|
|
release: true
|
|
|
|
skills:
|
|
- software-design
|
|
|
|
input:
|
|
source: cli
|
|
example: "analyze the authentication module"
|
|
|
|
steps:
|
|
# ── Track A: Code Quality ──────────────────────────────────────────
|
|
- id: quality-scan
|
|
persona: navigator
|
|
model: claude-haiku
|
|
workspace:
|
|
mount:
|
|
- source: ./
|
|
target: /project
|
|
mode: readonly
|
|
exec:
|
|
type: prompt
|
|
source: |
|
|
Perform a code quality scan of: {{ input }}
|
|
|
|
Identify:
|
|
1. Code duplication and copy-paste patterns
|
|
2. Functions exceeding 50 lines or high cyclomatic complexity
|
|
3. Naming inconsistencies and style violations
|
|
4. Missing or outdated documentation
|
|
5. Unused exports, dead code, and unreachable branches
|
|
|
|
Output a structured JSON report matching the contract schema.
|
|
output_artifacts:
|
|
- name: quality_scan
|
|
path: .wave/output/quality-scan.json
|
|
type: json
|
|
|
|
- id: quality-detail
|
|
persona: navigator
|
|
model: claude-haiku
|
|
dependencies: [quality-scan]
|
|
memory:
|
|
strategy: fresh
|
|
inject_artifacts:
|
|
- step: quality-scan
|
|
artifact: quality_scan
|
|
as: scan_results
|
|
workspace:
|
|
mount:
|
|
- source: ./
|
|
target: /project
|
|
mode: readonly
|
|
exec:
|
|
type: prompt
|
|
source: |
|
|
Deepen the code quality analysis from the scan results.
|
|
|
|
For each finding in .wave/artifacts/scan_results:
|
|
1. Verify the finding by reading the source code
|
|
2. Assess severity and impact on maintainability
|
|
3. Suggest specific refactoring with code examples
|
|
4. Search for similar patterns elsewhere in the codebase
|
|
|
|
Produce a markdown report with prioritized recommendations.
|
|
output_artifacts:
|
|
- name: quality_report
|
|
path: .wave/output/quality-detail.md
|
|
type: markdown
|
|
handover:
|
|
contract:
|
|
type: non_empty_file
|
|
source: .wave/output/quality-detail.md
|
|
|
|
# ── Track B: Security ──────────────────────────────────────────────
|
|
- id: security-scan
|
|
persona: navigator
|
|
model: claude-haiku
|
|
workspace:
|
|
mount:
|
|
- source: ./
|
|
target: /project
|
|
mode: readonly
|
|
exec:
|
|
type: prompt
|
|
source: |
|
|
Perform a security scan of: {{ input }}
|
|
|
|
Check for:
|
|
1. Injection vulnerabilities (SQL, command, path traversal)
|
|
2. Authentication and authorization gaps
|
|
3. Hardcoded secrets or credentials
|
|
4. Insecure data handling (missing encryption, logging sensitive data)
|
|
5. Input validation gaps at system boundaries
|
|
|
|
Output a structured JSON report matching the contract schema.
|
|
output_artifacts:
|
|
- name: security_scan
|
|
path: .wave/output/security-scan.json
|
|
type: json
|
|
|
|
- id: security-detail
|
|
persona: navigator
|
|
model: claude-haiku
|
|
dependencies: [security-scan]
|
|
memory:
|
|
strategy: fresh
|
|
inject_artifacts:
|
|
- step: security-scan
|
|
artifact: security_scan
|
|
as: scan_results
|
|
workspace:
|
|
mount:
|
|
- source: ./
|
|
target: /project
|
|
mode: readonly
|
|
exec:
|
|
type: prompt
|
|
source: |
|
|
Deepen the security analysis from the scan results.
|
|
|
|
For each finding in .wave/artifacts/scan_results:
|
|
1. Verify by reading the actual source code
|
|
2. Trace data flow from entry point to sink
|
|
3. Assess exploitability and real-world impact
|
|
4. Propose specific remediation with code examples
|
|
|
|
Produce a markdown report with severity-ordered findings.
|
|
output_artifacts:
|
|
- name: security_report
|
|
path: .wave/output/security-detail.md
|
|
type: markdown
|
|
handover:
|
|
contract:
|
|
type: non_empty_file
|
|
source: .wave/output/security-detail.md
|
|
|
|
# ── Merge: Converge both tracks ────────────────────────────────────
|
|
- id: merge
|
|
persona: summarizer
|
|
model: claude-haiku
|
|
dependencies: [quality-detail, security-detail]
|
|
memory:
|
|
strategy: fresh
|
|
inject_artifacts:
|
|
- step: quality-detail
|
|
artifact: quality_report
|
|
as: quality_findings
|
|
- step: security-detail
|
|
artifact: security_report
|
|
as: security_findings
|
|
exec:
|
|
type: prompt
|
|
source: |
|
|
Synthesize the quality and security analysis reports into a
|
|
unified assessment.
|
|
|
|
Read both reports:
|
|
- .wave/artifacts/quality_findings (code quality)
|
|
- .wave/artifacts/security_findings (security)
|
|
|
|
Produce a final report with:
|
|
1. Executive summary with overall health rating
|
|
2. Critical issues requiring immediate attention
|
|
3. Top recommendations ordered by impact
|
|
4. Positive observations and strengths
|
|
output_artifacts:
|
|
- name: report
|
|
path: .wave/output/dual-analysis-report.md
|
|
type: markdown
|
|
handover:
|
|
contract:
|
|
type: non_empty_file
|
|
source: .wave/output/dual-analysis-report.md
|