Skip to content

Incident Copilot + Workflow Quality Gates (Hackathon)#3773

Open
proffesor-for-testing wants to merge 2 commits intosuperplanehq:mainfrom
proffesor-for-testing:aqe-working-branch
Open

Incident Copilot + Workflow Quality Gates (Hackathon)#3773
proffesor-for-testing wants to merge 2 commits intosuperplanehq:mainfrom
proffesor-for-testing:aqe-working-branch

Conversation

@proffesor-for-testing
Copy link
Copy Markdown

Summary

Hey SuperPlane team! 👋

This is our hackathon solution from Team Professorianci — we built two features that we think could add real value to SuperPlane:

Incident Copilot

An intelligent workflow template that automates incident response by pulling context from PagerDuty, Datadog, and GitHub — then routing through triage, analysis, and resolution steps on the SuperPlane canvas.

  • Incident copilot canvas template (templates/canvases/incident-copilot.yaml)
  • Demo template with mock data for easy testing (templates/canvases/incident-copilot-demo.yaml)

Workflow Quality Gates (Canvas Linter)

A linter that validates canvas workflows for correctness and best practices — both server-side (Go) and client-side (TypeScript) with live UI feedback:

  • Backend: pkg/linter/linter.go — 15+ lint rules covering connectivity, naming, infinite loops, security, and more
  • Frontend: web_src/src/utils/canvasLinter.ts — mirrors the Go rules for instant in-browser feedback
  • API endpoint: POST /api/v1/canvases/:id/lint for programmatic linting
  • UI integration: lint button in the canvas header with inline warnings
  • Tests: comprehensive test suite in pkg/linter/linter_test.go

What's included

  • Canvas linter (Go + TypeScript) with 15+ quality rules
  • Incident Copilot templates
  • Lint API endpoint + UI integration
  • Full test coverage for the linter

We had a blast building this — SuperPlane is an awesome platform to work with! Let us know what you think. 🚀

— Team Professorianci

🤖 Generated with RuFlo & AQE Teams

Track A — Incident Copilot canvas template with AI-powered triage:
  PagerDuty trigger → Filter → parallel data collection → Merge →
  Claude AI assessment → Slack evidence pack → Approval gate.
  Includes simplified demo template with manual trigger.

Track B — Workflow linter with 9 static analysis rules:
  duplicate-node-id, invalid-edge, cycle-detected, orphan-node,
  dead-end, missing-approval-gate, missing-required-config,
  invalid-expression, unreachable-branch.
  Quality scoring (0-100, grades A-F) with per-category caps.
  Full Go + TypeScript parity (canvasLinter.ts).
  36 unit tests including dogfood tests for all 3 templates.

Track C — Demo glue: 4 mock JSON files, Slack channel configured.

Integration:
  - REST API: POST /api/v1/canvases/{id}/lint returns LintResult JSON
  - Pre-save quality gate: logs issues on every canvas save (warn-only)
  - Frontend: green/yellow/red badge in canvas header with tooltip
  - 2 rounds of devil's advocate review, 26 issues found and fixed

Co-Authored-By: RuFlo & AQE Teams
@superplanehq-integration
Copy link
Copy Markdown

👋 Commands for maintainers:

  • /sp start - Start an ephemeral machine (takes ~30s)
  • /sp stop - Stop a running machine (auto-executed on pr close)

Copy link
Copy Markdown
Contributor

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

memoryItemCount={props.memoryItemCount}
onExportYamlCopy={props.onExportYamlCopy}
onExportYamlDownload={props.onExportYamlDownload}
workflowNodes={props.workflowNodes}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing workflowEdges prop causes false-positive lint warnings

High Severity

The first CanvasContentHeader render site passes workflowNodes but omits workflowEdges. Since Header only returns null when both are undefined, the linter will run with nodes but an empty edge array. This produces false-positive orphan-node, dead-end, missing-approval-gate, and cycle warnings for every canvas viewed through this code path.

Fix in Cursor Fix in Web

source?: string;
target?: string;
channel?: string;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TypeScript linter reads missing channel from React Flow edges

Medium Severity

The LintEdge interface expects a channel property, but React Flow edges store this value in sourceHandle instead (confirmed in prepareEdge which maps edge.channel to sourceHandle). When styledEdges are passed as workflowEdges, channel is always undefined, so the duplicate-edge check collapses all edges onto "default" producing false warnings, and the unreachable-branch check never finds a "default" channel edge, flagging every filter node.

Additional Locations (1)
Fix in Cursor Fix in Web

- **Configuration**: `.agentic-qe/config.yaml`

---
*Generated by AQE v3 init - 2026-03-28T08:27:45.923Z*
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLAUDE.md overwritten with unrelated AQE tooling config

Medium Severity

The original CLAUDE.md (a project-wide agent instruction file pointing to AGENTS.md) was replaced with 160+ lines of Agentic QE v3 configuration, MCP tool references, and fleet initialization instructions. This is team-specific tooling configuration that overwrites the project's shared agent instructions file and doesn't belong in the repository.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant