From da86aa7754e717d2f9d4a4d71db79c3d8eac8e81 Mon Sep 17 00:00:00 2001 From: Chris Farhood Date: Mon, 11 May 2026 20:54:22 +0000 Subject: [PATCH] Add SDLC pipeline Mermaid diagram Visualizes both pipelines (A: plugin, B: infra), the board approval gate, PR review SLA, handoff protocol, and issue status lifecycle. Co-Authored-By: Paperclip --- skills/sdlc/sdlc-diagram.md | 159 ++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 skills/sdlc/sdlc-diagram.md diff --git a/skills/sdlc/sdlc-diagram.md b/skills/sdlc/sdlc-diagram.md new file mode 100644 index 0000000..c484b90 --- /dev/null +++ b/skills/sdlc/sdlc-diagram.md @@ -0,0 +1,159 @@ +# SDLC Pipeline Diagram + +## Full Lifecycle + +```mermaid +flowchart TD + subgraph Origin["Task Origin"] + GH["GitHub Issue"] + PP["Paperclip Issue"] + end + + subgraph Approval["Board Gate"] + BA{"Board Approval
Required?"} + REQ["Request Board Approval
→ Issue blocked"] + APPROVED["Approved"] + end + + subgraph Detection["Pipeline Detection"] + DET{"Changed files?"} + PA["Pipeline A
Plugin / Feature"] + PB["Pipeline B
Infrastructure"] + end + + subgraph PipelineA["Pipeline A: Plugin / Feature Changes"] + direction TB + A_ENG["Engineer writes code
(Gandalf)"] + A_PR["Create PR → main
cc @cpfarhood"] + A_CI{"CI Passes?"} + A_UAT["UAT Review
(Pixel Patty)
E2E browser testing"] + A_UAT_PASS{"UAT Approved?"} + A_QA["QA Review
(Regression Regina)
Test coverage, regressions"] + A_QA_PASS{"QA Approved?"} + A_CTO["CTO Review
(Null Pointer Nancy)
Architecture, security"] + A_CTO_PASS{"CTO Approved?"} + A_CEO["CEO Merge
(Countess)"] + end + + subgraph PipelineB["Pipeline B: Infrastructure Changes"] + direction TB + B_ENG["Engineer writes code
(Gandalf / Hugh)"] + B_PR["Create PR → main
cc @cpfarhood"] + B_CI{"CI Passes?"} + B_QA["QA Review
(Regression Regina)"] + B_QA_PASS{"QA Approved?"} + B_CTO["CTO Review
(Null Pointer Nancy)"] + B_CTO_PASS{"CTO Approved?"} + B_CEO["CEO Merge
(Countess)"] + end + + subgraph Result["Outcome"] + MERGED["Merged to main
✓ Production"] + RETURNED["Returned to Engineer
Fix and resubmit"] + end + + %% Origin routing + GH --> BA + PP --> DET + BA -->|"originKind: github"| REQ + REQ -->|"PAPERCLIP_APPROVAL_STATUS"| APPROVED + BA -->|"originKind: other"| DET + APPROVED --> DET + + %% Pipeline detection + DET -->|"headlamp-*-plugin/ code"| PA + DET -->|".github/, infra/, org/"| PB + + %% Pipeline A flow + PA --> A_ENG --> A_PR --> A_CI + A_CI -->|"Pass"| A_UAT + A_CI -->|"Fail"| RETURNED + A_UAT --> A_UAT_PASS + A_UAT_PASS -->|"Pass"| A_QA + A_UAT_PASS -->|"Fail"| RETURNED + A_QA --> A_QA_PASS + A_QA_PASS -->|"Pass"| A_CTO + A_QA_PASS -->|"Fail"| RETURNED + A_CTO --> A_CTO_PASS + A_CTO_PASS -->|"Pass"| A_CEO + A_CTO_PASS -->|"Fail — CEO rejection"| A_CTO + A_CTO_PASS -->|"Fail — other"| RETURNED + A_CEO --> MERGED + + %% Pipeline B flow + PB --> B_ENG --> B_PR --> B_CI + B_CI -->|"Pass"| B_QA + B_CI -->|"Fail"| RETURNED + B_QA --> B_QA_PASS + B_QA_PASS -->|"Pass"| B_CTO + B_QA_PASS -->|"Fail"| RETURNED + B_CTO --> B_CTO_PASS + B_CTO_PASS -->|"Pass"| B_CEO + B_CTO_PASS -->|"Fail — CEO rejection"| B_CTO + B_CTO_PASS -->|"Fail — other"| RETURNED + B_CEO --> MERGED + + RETURNED -->|"Fix and resubmit"| A_PR + RETURNED -->|"Fix and resubmit"| B_PR + + %% Styling + classDef gate fill:#f9e4e4,stroke:#c0392b,color:#000 + classDef pass fill:#e4f9e4,stroke:#27ae60,color:#000 + classDef agent fill:#e4e9f9,stroke:#2980b9,color:#000 + classDef decision fill:#fef9e7,stroke:#f39c12,color:#000 + + class BA,A_CI,A_UAT_PASS,A_QA_PASS,A_CTO_PASS,B_CI,B_QA_PASS,B_CTO_PASS,DET decision + class A_UAT,A_QA,A_CTO,B_QA,B_CTO gate + class MERGED pass + class A_ENG,B_ENG,A_CEO,B_CEO agent +``` + +## PR Review SLA + +```mermaid +gantt + title PR Review SLA Timeline (per stage) + dateFormat X + axisFormat %d h + + section SLA Windows + Normal review window :done, 0, 24 + CEO escalation at 24h :active, 24, 48 + SLA violation at 48h :crit, 48, 72 + Release blocker at 72h :crit, 72, 96 +``` + +## Handoff Protocol + +```mermaid +sequenceDiagram + participant Src as Source Agent + participant API as Paperclip API + participant Tgt as Target Agent + + Src->>API: PATCH /issues/{id}
assigneeAgentId: target + Src->>API: PATCH /issues/{id}
status: "todo" + Note over Src,API: Never use "in_review" —
it won't trigger inbox + Src->>API: POST /issues/{id}/release
X-Paperclip-Run-Id header + API-->>Tgt: Inbox wake + Tgt->>API: POST /issues/{id}/checkout + Tgt->>Tgt: Begin work +``` + +## Issue Status Lifecycle + +```mermaid +stateDiagram-v2 + [*] --> backlog: Created (unscheduled) + [*] --> todo: Created (ready) + backlog --> todo: Scheduled + todo --> in_progress: Checkout + in_progress --> in_review: Awaiting feedback + in_progress --> blocked: External blocker + in_progress --> done: Work complete + in_review --> in_progress: Feedback received + blocked --> in_progress: Unblocked + in_progress --> cancelled: Abandoned + todo --> cancelled: Abandoned + backlog --> cancelled: Abandoned +```