aiwg
Version:
Deployment tool and support utility for AI context. Copies agents, skills, commands, rules, and behaviors into the paths each AI platform reads (Claude Code, Codex, Copilot, Cursor, Warp, OpenClaw, and 6 more) so one source of truth works across 10 platfo
198 lines (152 loc) • 10.5 kB
Markdown
# Activity Diagram Spec
## Metadata
- ID: DES-ACT-`id`
- Owner: `name/role/team`
- Contributors: `list`
- Reviewers: `list`
- Team: `team`
- Stakeholders: `list`
- Status: `draft/in-progress/blocked/approved/done`
- Dates: created `YYYY-MM-DD` / updated `YYYY-MM-DD` / due `YYYY-MM-DD`
- Related: UC-`id`, REQ-`id`, DES-`id`, BS-`id`, CODE-`module`, TEST-`id`
## Related Templates
- agentic/code/frameworks/sdlc-complete/templates/analysis-design/use-case-realization-template.md
- agentic/code/frameworks/sdlc-complete/templates/analysis-design/sequence-diagram-template.md
- agentic/code/frameworks/sdlc-complete/templates/analysis-design/state-machine-spec-template.md
- agentic/code/frameworks/sdlc-complete/templates/analysis-design/decision-table-template.md
## Traceability
- Parent Use Case: UC-`id` — `title`
- Behavioral Spec: BS-`id`
- Interface Contracts: IC-`id`, IC-`id`
## Process Context
- Process Name: `human-readable name for this activity flow`
- Trigger: `what event or call initiates this process`
- Scope: `which component/service/bounded context owns this flow`
- Termination: `conditions under which the process ends normally`
## Activity Diagram
Use `flowchart TD` for top-down flow. Use decision diamonds for branching. Use `par` / `and` notation in comments to mark parallel paths (MermaidJS `flowchart` does not have native fork/join syntax; annotate parallel sections explicitly).
```mermaid
flowchart TD
Start([Start]) --> ActivityA[Activity A]
ActivityA --> Decision{Condition?}
Decision -->|Yes| ActivityB[Activity B]
Decision -->|No| ActivityC[Activity C]
ActivityB --> Join[Continue]
ActivityC --> Join
Join --> ActivityD[Activity D]
ActivityD --> End([End])
```
For concurrent paths, annotate with comments:
```mermaid
flowchart TD
Start([Start]) --> Fork[Fork — parallel begin]
Fork --> PathA[Path A Activity]
Fork --> PathB[Path B Activity]
PathA --> Join[Join — parallel end]
PathB --> Join
Join --> NextActivity[Next Activity]
NextActivity --> End([End])
```
## Activity Catalog
Every node in the diagram must have a corresponding row here.
| ID | Activity | Swim Lane | Description | Input | Output | Duration Hint |
| -- | -------- | --------- | ----------- | ----- | ------ | ------------- |
| ACT-01 | `activity name` | `actor/system/service` | `what work is done` | `data consumed` | `data produced` | `sync/async/batch` |
## Decision Node Catalog
Every diamond in the diagram must have a corresponding row here.
| ID | Decision | Swim Lane | Condition | True Path | False Path | Data Required |
| -- | -------- | --------- | --------- | --------- | ---------- | ------------- |
| DEC-01 | `decision name` | `actor/system/service` | `boolean expression` | `activity/end` | `activity/end` | `fields needed to evaluate` |
## Swim Lane Assignments
| Swim Lane | Actor / System | Responsibilities in This Flow |
| --------- | -------------- | ----------------------------- |
| `lane name` | `role or component` | `what this participant does in this process` |
## Parallel Paths
Document all fork/join pairs. If no parallelism exists, write `none`.
| Fork After | Parallel Activities | Join Before | Synchronization Rule |
| ---------- | ------------------- | ----------- | -------------------- |
| `activity name` | `activity A, activity B` | `activity name` | `all must complete / first wins / any one completes` |
## Exception Flows
Document all error and exception paths. Every decision node with a failure branch must appear here.
| Trigger | Exception | Handling Activity | Recovery Path | Owner |
| ------- | --------- | ----------------- | ------------- | ----- |
| `what goes wrong` | `exception type or error name` | `compensating activity` | `retry / abort / escalate` | `swim lane responsible` |
## Completeness Checklist
- [ ] Every diagram node appears in the Activity Catalog or Decision Node Catalog
- [ ] Every swim lane in the diagram is listed in the Swim Lane Assignments table
- [ ] Every fork has a corresponding join
- [ ] Every decision node has both a true path and a false path
- [ ] Every exception path leads to a defined recovery or terminal state
- [ ] The process has exactly one start node (`[*]` or `Start`) and at least one end node
- [ ] No orphaned nodes exist (every node is reachable from Start)
- [ ] All parallel activities in the same fork are independent (no shared mutable state)
- [ ] Diagram syntax is valid MermaidJS `flowchart TD`
## How to Fill This Template
1. **Identify the Process**: Name the business process or technical flow being modeled. Link it to the parent use case (UC-`id`).
2. **Define Trigger and Termination**: What event starts this process? What conditions end it normally?
3. **Draw the Diagram First**: Sketch the flow using MermaidJS `flowchart TD`. Start with the happy path, then add decision branches and parallel paths.
4. **Fill the Activity Catalog**: One row per diagram node. Every activity must have a swim lane, input, and output — this is the authoritative spec the diagram visualizes.
5. **Fill the Decision Node Catalog**: One row per diamond. Every decision must have a boolean condition and explicit true/false paths.
6. **Assign Swim Lanes**: Map each activity to the actor or component responsible. If multiple components collaborate, split into separate activities.
7. **Document Parallel Paths**: For every fork, specify the synchronization rule (all must complete, first wins, etc.). Verify parallel activities share no mutable state.
8. **Document Exception Flows**: Every decision node with a failure branch needs an entry. Specify the compensation or recovery activity.
9. **Validate**: Walk the completeness checklist. Every diagram node must appear in a catalog table; every fork must have a join.
## Example
### Process: Order Fulfillment
**Trigger**: `OrderSubmitted` event received by Fulfillment Service.
**Scope**: Fulfillment Service, Inventory Service, Payment Service, Shipping Service.
**Termination**: Order reaches `Shipped` state or is cancelled with refund issued.
```mermaid
flowchart TD
Start([OrderSubmitted]) --> CheckInventory[Check Inventory]
CheckInventory --> InvDecision{Inventory\navailable?}
InvDecision -->|No| BackorderNotify[Notify Customer — Backorder]
BackorderNotify --> End1([End — Backorder])
InvDecision -->|Yes| ReserveInventory[Reserve Inventory]
ReserveInventory --> Fork[Fork — parallel begin]
Fork --> AuthPayment[Authorize Payment]
Fork --> PrepareShipment[Prepare Shipment Label]
AuthPayment --> PayDecision{Payment\nauthorized?}
PayDecision -->|No| ReleaseInventory[Release Inventory Reservation]
ReleaseInventory --> RefundNotify[Notify Customer — Payment Failed]
RefundNotify --> End2([End — Cancelled])
PayDecision -->|Yes| PaymentJoin[Payment confirmed]
PrepareShipment --> LabelJoin[Label ready]
PaymentJoin --> Join[Join — parallel end]
LabelJoin --> Join
Join --> DispatchShipment[Dispatch to Carrier]
DispatchShipment --> SendConfirmation[Send Shipment Confirmation]
SendConfirmation --> End3([End — Shipped])
```
**Activity Catalog (excerpt)**:
| ID | Activity | Swim Lane | Description | Input | Output | Duration Hint |
| -- | -------- | --------- | ----------- | ----- | ------ | ------------- |
| ACT-01 | Check Inventory | Inventory Service | Query available stock for all line items | `order.lineItems` | `availabilityMap` | sync |
| ACT-02 | Reserve Inventory | Inventory Service | Place hold on stock to prevent oversell | `order.id, lineItems` | `reservationId` | sync |
| ACT-03 | Authorize Payment | Payment Service | Charge or pre-auth customer payment method | `order.id, amount, paymentMethod` | `authorizationId` | async |
| ACT-04 | Prepare Shipment Label | Shipping Service | Generate carrier label and tracking number | `order.id, address` | `trackingNumber, labelUrl` | async |
| ACT-05 | Dispatch to Carrier | Shipping Service | Hand package to carrier and emit ShipmentEvent | `trackingNumber` | `dispatchConfirmation` | sync |
| ACT-06 | Release Inventory Reservation | Inventory Service | Release hold on reserved stock | `reservationId` | none | sync |
| ACT-07 | Send Shipment Confirmation | Notification Service | Email customer with tracking link | `order.id, trackingNumber` | none | async |
**Decision Node Catalog (excerpt)**:
| ID | Decision | Swim Lane | Condition | True Path | False Path | Data Required |
| -- | -------- | --------- | --------- | --------- | ---------- | ------------- |
| DEC-01 | Inventory available? | Inventory Service | `availabilityMap.allAvailable == true` | Reserve Inventory | Notify Customer — Backorder | `availabilityMap` |
| DEC-02 | Payment authorized? | Payment Service | `authorizationId != null && !authorizationId.expired` | Payment confirmed | Release Inventory Reservation | `authorizationId` |
**Parallel Paths**:
| Fork After | Parallel Activities | Join Before | Synchronization Rule |
| ---------- | ------------------- | ----------- | -------------------- |
| Reserve Inventory | Authorize Payment, Prepare Shipment Label | Join — parallel end | all must complete |
**Exception Flows**:
| Trigger | Exception | Handling Activity | Recovery Path | Owner |
| ------- | --------- | ----------------- | ------------- | ----- |
| Payment authorization fails | `PaymentAuthorizationException` | Release Inventory Reservation | abort; notify customer | Payment Service |
| Carrier API timeout | `ShippingProviderTimeoutException` | Retry up to 3 times, then escalate | retry with backoff; escalate to ops if exhausted | Shipping Service |
| Inventory reservation conflict | `InventoryConflictException` | Release and re-check | re-evaluate availability | Inventory Service |
## Agent Notes
- Keep diagrams to 15 nodes or fewer; split larger processes into sub-flows with a reference node (`[See DES-ACT-{id}]`).
- Every fork must have an explicit join; dangling parallel paths indicate incomplete design.
- Use swim lanes in comments or diagram titles when MermaidJS `flowchart` cannot express them natively.
- Derive integration test scenarios from exception flows — each exception path is a required negative test.
- Confirm all parallel activities are free of shared mutable state before marking parallelism as valid.
- Save finalized spec to `.aiwg/architecture/activity-diagrams/DES-ACT-{id}.md`.