Workflow Documentation
> **Skill Purpose:** Testing workflow management, cross-department flow tracking, and SSOT integration procedures
SKILL.md
Full skill instructions
Workflow Documentation
Skill Purpose: Testing workflow management, cross-department flow tracking, and SSOT integration procedures
Core Skill Pattern
Objective: Establish comprehensive workflow documentation system with testing flow tracking, cross-department coordination, and SSOT integration.
Universal Pattern:
- Define workflow documentation strategy and standards
- Create testing workflow management procedures
- Establish cross-department flow tracking systems
- Set up SSOT integration and documentation procedures
- Create workflow validation and maintenance procedures
Key Decisions (Project-Specific):
- Workflow documentation format and structure
- Testing workflow tracking mechanisms
- Cross-department handoff documentation standards
- SSOT integration approach and tools
- Workflow validation and update procedures
Project-Specific Implementation Notes
Customize per project:
- Workflow documentation format based on project complexity
- Testing workflow depth based on testing requirements
- Cross-department coordination based on organizational structure
- SSOT integration based on existing documentation systems
- Workflow maintenance frequency based on change rate
Example Implementation (Zeus Framework Workflow Pattern)
Note: This is an example pattern using structured workflow documentation with cross-department tracking. Adapt workflow documentation and patterns based on your specific project requirements and organizational needs.
Prerequisites (Example)
- Project structure and agent roles defined
- Cross-department handoff procedures established
- SSOT documentation system in place
- Testing workflow requirements identified
Example: Workflow Documentation Implementation
Framework-Specific Example: This demonstrates workflow documentation patterns with Zeus framework. Adapt for your workflow framework and documentation requirements.
Workflow Configuration
// lib/workflow-config.ts
export interface WorkflowConfig {
documentation: {
format: 'markdown' | 'json' | 'yaml';
location: string;
template: string;
versioning: boolean;
};
tracking: {
flowId: string;
status: 'pending' | 'in-progress' | 'completed' | 'blocked' | 'failed';
priority: 'low' | 'medium' | 'high' | 'critical';
assignee: string;
department: string;
};
integration: {
ssotUpdates: boolean;
crossDepartmentNotifications: boolean;
automatedStatusUpdates: boolean;
};
}
export const workflowConfig: WorkflowConfig = {
documentation: {
format: 'markdown',
location: '/workflows/',
template: 'workflow-template.md',
versioning: true,
},
tracking: {
flowId: 'FLOW-YYYYMMDD-###',
status: 'pending',
priority: 'medium',
assignee: '',
department: '',
},
integration: {
ssotUpdates: true,
crossDepartmentNotifications: true,
automatedStatusUpdates: true,
},
};
Workflow Documentation Structure
// lib/workflow-structure.ts
export interface WorkflowDocument {
metadata: {
id: string;
title: string;
description: string;
department: string;
priority: 'low' | 'medium' | 'high' | 'critical';
status: 'pending' | 'in-progress' | 'completed' | 'blocked' | 'failed';
created: string;
updated: string;
assignee: string;
reviewer?: string;
};
flow: {
trigger: string;
prerequisites: string[];
steps: WorkflowStep[];
deliverables: string[];
dependencies: string[];
};
crossDepartment: {
handoffs: CrossDepartmentHandoff[];
notifications: Notification[];
approvals: Approval[];
};
testing: {
testScenarios: TestScenario[];
validationCriteria: ValidationCriteria[];
qualityGates: QualityGate[];
};
ssot: {
updates: SSOTUpdate[];
references: string[];
impact: string[];
};
}
export interface WorkflowStep {
id: string;
title: string;
description: string;
assignee: string;
department: string;
estimatedTime: number; // hours
dependencies: string[];
deliverables: string[];
status: 'pending' | 'in-progress' | 'completed' | 'blocked';
notes?: string;
}
export interface CrossDepartmentHandoff {
from: string;
to: string;
description: string;
deliverables: string[];
approvalRequired: boolean;
status: 'pending' | 'approved' | 'rejected';
}
export interface TestScenario {
id: string;
name: string;
description: string;
type: 'unit' | 'integration' | 'e2e' | 'security' | 'performance';
priority: 'low' | 'medium' | 'high';
status: 'pending' | 'in-progress' | 'passed' | 'failed';
assignee: string;
}
Testing Workflow Management
// lib/testing-workflow.ts
export class TestingWorkflowManager {
private workflows: Map<string, WorkflowDocument> = new Map();
static createTestingWorkflow(
title: string,
description: string,
department: string,
testType: 'unit' | 'integration' | 'e2e' | 'security' | 'performance'
): WorkflowDocument {
const workflowId = `TEST-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
const workflow: WorkflowDocument = {
metadata: {
id: workflowId,
title,
description,
department,
priority: 'medium',
status: 'pending',
created: new Date().toISOString(),
updated: new Date().toISOString(),
assignee: '',
},
flow: {
trigger: `Testing request for ${testType}`,
prerequisites: [
'Code available for testing',
'Test environment prepared',
'Test data available',
],
steps: this.generateTestingSteps(testType),
deliverables: [
'Test plan',
'Test cases',
'Test results',
'Test report',
],
dependencies: [],
},
crossDepartment: {
handoffs: this.generateHandoffs(testType),
notifications: [],
approvals: [],
},
testing: {
testScenarios: [],
validationCriteria: this.generateValidationCriteria(testType),
qualityGates: this.generateQualityGates(testType),
},
ssot: {
updates: [],
references: [],
impact: [],
},
};
return workflow;
}
private static generateTestingSteps(testType: string): WorkflowStep[] {
const baseSteps = [
{
id: '1',
title: 'Test Planning',
description: 'Create comprehensive test plan',
assignee: '',
department: 'QA & Security',
estimatedTime: 4,
dependencies: [],
deliverables: ['Test plan document'],
status: 'pending',
},
{
id: '2',
title: 'Test Environment Setup',
description: 'Prepare test environment and data',
assignee: '',
department: 'QA & Security',
estimatedTime: 2,
dependencies: ['1'],
deliverables: ['Environment ready', 'Test data prepared'],
status: 'pending',
},
{
id: '3',
title: 'Test Execution',
description: 'Execute test cases and scenarios',
assignee: '',
department: 'QA & Security',
estimatedTime: 8,
dependencies: ['1', '2'],
deliverables: ['Test results', 'Execution logs'],
status: 'pending',
},
{
id: '4',
title: 'Test Reporting',
description: 'Generate comprehensive test report',
assignee: '',
department: 'QA & Security',
estimatedTime: 2,
dependencies: ['3'],
deliverables: ['Test report', 'Metrics summary'],
status: 'pending',
},
];
return baseSteps;
}
private static generateHandoffs(testType: string): CrossDepartmentHandoff[] {
const handoffs: CrossDepartmentHandoff[] = [];
// Common handoffs
handoffs.push({
from: 'QA & Security',
to: 'Architecture',
description: 'Infrastructure and deployment testing requirements',
deliverables: ['Test environment specifications'],
approvalRequired: false,
status: 'pending',
});
if (testType === 'security') {
handoffs.push({
from: 'QA & Security',
to: 'Data',
description: 'RLS policy security review',
deliverables: ['Security review findings', 'RLS recommendations'],
approvalRequired: true,
status: 'pending',
});
}
if (testType === 'e2e' || testType === 'performance') {
handoffs.push({
from: 'QA & Security',
to: 'UI',
description: 'UI component testing and accessibility validation',
deliverables: ['UI test results', 'Accessibility compliance report'],
approvalRequired: false,
status: 'pending',
});
}
return handoffs;
}
private static generateValidationCriteria(testType: string): ValidationCriteria[] {
const criteria: ValidationCriteria[] = [
{
id: '1',
name: 'Test Coverage',
description: 'Minimum test coverage requirements met',
threshold: '80%',
mandatory: true,
},
{
id: '2',
name: 'Test Execution',
description: 'All tests executed without errors',
threshold: '100%',
mandatory: true,
},
];
if (testType === 'performance') {
criteria.push({
id: '3',
name: 'Performance Metrics',
description: 'Core Web Vitals within acceptable thresholds',
threshold: 'LCP < 2.5s, FID < 100ms, CLS < 0.1',
mandatory: true,
});
}
if (testType === 'security') {
criteria.push({
id: '3',
name: 'Security Scan',
description: 'No critical or high severity vulnerabilities',
threshold: '0 critical/high',
mandatory: true,
});
}
return criteria;
}
private static generateQualityGates(testType: string): QualityGate[] {
const gates: QualityGate[] = [
{
id: '1',
name: 'Test Plan Review',
description: 'Test plan reviewed and approved',
required: true,
status: 'pending',
},
{
id: '2',
name: 'Environment Validation',
description: 'Test environment validated and ready',
required: true,
status: 'pending',
},
];
return gates;
}
}
Cross-Department Flow Tracking
// lib/flow-tracking.ts
export class FlowTracker {
private activeFlows: Map<string, FlowState> = new Map();
static createFlow(
id: string,
title: string,
type: 'testing' | 'development' | 'deployment' | 'security',
department: string
): FlowState {
const flow: FlowState = {
id,
title,
type,
department,
status: 'pending',
currentStep: 0,
totalSteps: 0,
startTime: null,
endTime: null,
assignee: '',
steps: [],
crossDepartmentHandoffs: [],
ssotUpdates: [],
};
this.activeFlows.set(id, flow);
return flow;
}
static updateFlowStatus(
flowId: string,
status: 'pending' | 'in-progress' | 'completed' | 'blocked' | 'failed',
notes?: string
): void {
const flow = this.activeFlows.get(flowId);
if (!flow) return;
flow.status = status;
flow.updated = new Date().toISOString();
if (notes) {
flow.notes = flow.notes ? `${flow.notes}\n${new Date().toISOString()}: ${notes}` : notes;
}
if (status === 'in-progress' && !flow.startTime) {
flow.startTime = new Date().toISOString();
}
if (status === 'completed' || status === 'failed') {
flow.endTime = new Date().toISOString();
}
// Notify cross-department stakeholders
this.notifyStakeholders(flow);
}
static addCrossDepartmentHandoff(
flowId: string,
fromDepartment: string,
toDepartment: string,
deliverables: string[]
): void {
const flow = this.activeFlows.get(flowId);
if (!flow) return;
const handoff: CrossDepartmentHandoff = {
id: `HANDOFF-${Date.now()}`,
from: fromDepartment,
to: toDepartment,
deliverables,
status: 'pending',
created: new Date().toISOString(),
completed: null,
};
flow.crossDepartmentHandoffs.push(handoff);
// Notify target department
this.notifyDepartment(toDepartment, handoff);
}
static completeHandoff(flowId: string, handoffId: string): void {
const flow = this.activeFlows.get(flowId);
if (!flow) return;
const handoff = flow.crossDepartmentHandoffs.find(h => h.id === handoffId);
if (handoff) {
handoff.status = 'completed';
handoff.completed = new Date().toISOString();
}
}
private static notifyStakeholders(flow: FlowState): void {
// Implementation for notifying stakeholders about flow status changes
console.log(`Flow ${flow.id} status updated to ${flow.status}`);
// Send notifications to relevant departments
flow.crossDepartmentHandoffs.forEach(handoff => {
if (handoff.status === 'pending') {
this.notifyDepartment(handoff.to, handoff);
}
});
}
private static notifyDepartment(department: string, handoff: CrossDepartmentHandoff): void {
// Implementation for department-specific notifications
console.log(`Notification sent to ${department}: Handoff ${handoff.id} - ${handoff.description}`);
}
static getFlowMetrics(department?: string): FlowMetrics {
const flows = Array.from(this.activeFlows.values());
const filteredFlows = department ? flows.filter(f => f.department === department) : flows;
return {
total: filteredFlows.length,
byStatus: {
pending: filteredFlows.filter(f => f.status === 'pending').length,
inProgress: filteredFlows.filter(f => f.status === 'in-progress').length,
completed: filteredFlows.filter(f => f.status === 'completed').length,
blocked: filteredFlows.filter(f => f.status === 'blocked').length,
failed: filteredFlows.filter(f => f.status === 'failed').length,
},
byType: {
testing: filteredFlows.filter(f => f.type === 'testing').length,
development: filteredFlows.filter(f => f.type === 'development').length,
deployment: filteredFlows.filter(f => f.type === 'deployment').length,
security: filteredFlows.filter(f => f.type === 'security').length,
},
averageDuration: this.calculateAverageDuration(filteredFlows),
};
}
private static calculateAverageDuration(flows: FlowState[]): number {
const completedFlows = flows.filter(f => f.startTime && f.endTime);
if (completedFlows.length === 0) return 0;
const totalDuration = completedFlows.reduce((total, flow) => {
const start = new Date(flow.startTime).getTime();
const end = new Date(flow.endTime).getTime();
return total + (end - start);
}, 0);
return totalDuration / completedFlows.length / (1000 * 60 * 60); // Convert to hours
}
}
SSOT Integration
// lib/ssot-integration.ts
export class SSOTIntegration {
static updateSSOTDocument(
documentPath: string,
updateType: 'create' | 'update' | 'delete',
content: any,
workflowId: string
): SSOTUpdate {
const update: SSOTUpdate = {
id: `SSOT-${Date.now()}`,
documentPath,
updateType,
content,
workflowId,
timestamp: new Date().toISOString(),
status: 'pending',
applied: false,
};
// Apply the update to SSOT
this.applySSOTUpdate(update);
return update;
}
private static applySSOTUpdate(update: SSOTUpdate): void {
try {
// Implementation for applying updates to SSOT documents
console.log(`Applying SSOT update: ${update.updateType} to ${update.documentPath}`);
// Update the document
if (update.updateType === 'create') {
this.createSSOTDocument(update);
} else if (update.updateType === 'update') {
this.updateSSOTDocument(update);
} else if (update.updateType === 'delete') {
this.deleteSSOTDocument(update);
}
update.status = 'completed';
update.applied = true;
update.appliedAt = new Date().toISOString();
} catch (error) {
update.status = 'failed';
update.error = (error as Error).message;
console.error(`SSOT update failed: ${update.error}`);
}
}
private static createSSOTDocument(update: SSOTUpdate): void {
// Implementation for creating SSOT documents
console.log(`Creating SSOT document: ${update.documentPath}`);
}
private static updateSSOTDocument(update: SSOTUpdate): void {
// Implementation for updating SSOT documents
console.log(`Updating SSOT document: ${update.documentPath}`);
}
private static deleteSSOTDocument(update: SSOTUpdate): void {
// Implementation for deleting SSOT documents
console.log(`Deleting SSOT document: ${update.documentPath}`);
}
static validateSSOTConsistency(): SSOTValidationResult {
const issues: string[] = [];
// Check for orphaned references
// Check for broken links
// Check for outdated information
return {
isValid: issues.length === 0,
issues,
lastValidated: new Date().toISOString(),
};
}
}
Workflow Documentation Templates
# Testing Workflow Template
## Metadata
- **Workflow ID:** {workflowId}
- **Title:** {title}
- **Department:** {department}
- **Priority:** {priority}
- **Assignee:** {assignee}
- **Status:** {status}
- **Created:** {created}
- **Updated:** {updated}
## Flow Description
{description}
## Prerequisites
{prerequisites}
## Steps
{steps}
## Deliverables
{deliverables}
## Cross-Department Handoffs
{handoffs}
## Testing Requirements
{testing}
## SSOT Updates
{ssot}
Best Practices
- Consistent formatting - Use standardized templates for all workflow documentation
- Real-time tracking - Update workflow status as work progresses
- Cross-department coordination - Document all handoffs and dependencies
- SSOT integration - Keep SSOT documents synchronized with workflow changes
- Quality validation - Validate workflow completeness and accuracy
Stop Conditions
STOP and escalate if:
- Workflow requirements unclear or incomplete
- Cross-department dependencies not documented
- SSOT integration strategy missing
- Workflow tracking system not established
Skill Version: 1.0.0
