Feature: Webhook notifications for session events #17

Closed
opened 2026-03-10 03:47:26 +00:00 by Mark · 3 comments
Owner

Issue

No way to integrate DevForge with external systems (CI/CD, Slack, etc.) when session events occur.

Use Cases

  • Notify Slack when session is created/stopped
  • Trigger CI/CD pipeline on snapshot creation
  • Alert on resource quota exceeded
  • Audit log forwarding to SIEM

Proposed Solution

  1. Webhook configuration UI/API
  2. Event types: session.created, session.started, session.stopped, snapshot.created, etc.
  3. Retry logic with exponential backoff
  4. Signature verification for security

Technical Approach

class WebhookEvent:
    event_type: str
    timestamp: datetime
    payload: dict
    signature: str  # HMAC-SHA256

Acceptance Criteria

  • Webhook CRUD API endpoints
  • Event type selection
  • Webhook delivery with retries
  • Signature verification
  • Webhook delivery logs
  • UI for webhook management
  • Documentation with examples

Priority: Low
Type: Feature

## Issue No way to integrate DevForge with external systems (CI/CD, Slack, etc.) when session events occur. ## Use Cases - Notify Slack when session is created/stopped - Trigger CI/CD pipeline on snapshot creation - Alert on resource quota exceeded - Audit log forwarding to SIEM ## Proposed Solution 1. Webhook configuration UI/API 2. Event types: session.created, session.started, session.stopped, snapshot.created, etc. 3. Retry logic with exponential backoff 4. Signature verification for security ## Technical Approach ```python class WebhookEvent: event_type: str timestamp: datetime payload: dict signature: str # HMAC-SHA256 ``` ## Acceptance Criteria - [ ] Webhook CRUD API endpoints - [ ] Event type selection - [ ] Webhook delivery with retries - [ ] Signature verification - [ ] Webhook delivery logs - [ ] UI for webhook management - [ ] Documentation with examples **Priority:** Low **Type:** Feature
Author
Owner

GSD VERIFY phase failed after 3 attempts.
═══ Gate: verify-passed (devforge#17) ═══
Mode: Tier 1 (functional only)

GATE OK: All gates up to 'implement' pass
── Tier 1: Functional ────────────────────────────────
Running tests...
❌ Tests failed (exit 1)
 FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > decodeTerminalMessage > should return empty Uint8Array for Blob input in sync decoder
 FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > debug mode > should return false when debug is not enabled
 FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > debug mode > should return true when debug is enabled
 FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > debug mode > should disable debug mode
ReferenceError: localStorage is not defined
 ❯ services/web/src/utils/terminalUtils.test.ts:12:5
 10|  beforeEach(() => {
 11|  vi.restoreAllMocks();
 12|  localStorage.clear();
 |  ^
 13|  });
 14| 

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/9]⎯

 Test Files  4 failed | 1 passed (5)
 Tests  6 failed | 4 passed (10)
 Start at  23:34:06
 Duration  660ms (transform 479ms, setup 0ms, import 122ms, tests 9ms, environment 1ms)
Running linter...
✅ Lint clean
⚠️ No type checker discovered
Previous test count: unknown

❌ GATE FAIL: verify-passed
- Tests failed with exit code 1
GATE FAIL: verify — blocked at 2026-05-21T06:34:08Z
Class: test-failure
Evidence: Verification failed: 1 failures
Git tag: devforge#17-gate-verify-fail-a5c97efeff13 (use gate-retry after fixing)

GSD VERIFY phase failed after 3 attempts. ═══ Gate: verify-passed (devforge#17) ═══ Mode: Tier 1 (functional only) GATE OK: All gates up to 'implement' pass ── Tier 1: Functional ──────────────────────────────── Running tests... ❌ Tests failed (exit 1)  FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > decodeTerminalMessage > should return empty Uint8Array for Blob input in sync decoder  FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > debug mode > should return false when debug is not enabled  FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > debug mode > should return true when debug is enabled  FAIL  services/web/src/utils/terminalUtils.test.ts > terminalUtils > debug mode > should disable debug mode ReferenceError: localStorage is not defined  ❯ services/web/src/utils/terminalUtils.test.ts:12:5  10|  beforeEach(() => {  11|  vi.restoreAllMocks();  12|  localStorage.clear();  |  ^  13|  });  14|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/9]⎯  Test Files  4 failed | 1 passed (5)  Tests  6 failed | 4 passed (10)  Start at  23:34:06  Duration  660ms (transform 479ms, setup 0ms, import 122ms, tests 9ms, environment 1ms) Running linter... ✅ Lint clean ⚠️ No type checker discovered Previous test count: unknown ❌ GATE FAIL: verify-passed - Tests failed with exit code 1 GATE FAIL: verify — blocked at 2026-05-21T06:34:08Z Class: test-failure Evidence: Verification failed: 1 failures Git tag: devforge#17-gate-verify-fail-a5c97efeff13 (use gate-retry after fixing)
Author
Owner

GSD RESEARCH phase could not determine a clear fix.

]11;?\Zero webhook references in the entire repo. This is a feature request, not a bug fix. Let me now evaluate against the four criteria:

STATUS: UNCLEAR
EVIDENCE: Zero references to "webhook" exist anywhere in the repository. Confirmed by:

  • Content search across all files for "webhook" — 0 matches
  • No Webhook model in models.py (only User, Session, AuditEvent, Snapshot, Share, SettingsRepository, SettingValue, GitCredentials)
  • No webhook route in routes/init.py (only auth, git, env,
GSD RESEARCH phase could not determine a clear fix. ]11;?\Zero webhook references in the entire repo. This is a feature request, not a bug fix. Let me now evaluate against the four criteria: STATUS: UNCLEAR EVIDENCE: Zero references to "webhook" exist anywhere in the repository. Confirmed by: - Content search across all files for "webhook" — 0 matches - No Webhook model in models.py (only User, Session, AuditEvent, Snapshot, Share, SettingsRepository, SettingValue, GitCredentials) - No webhook route in routes/__init__.py (only auth, git, env,
Mark 2026-08-05 03:51:21 +00:00
Mark reopened this issue 2026-08-08 08:55:31 +00:00
Author
Owner

Re-opened: false-positive close confirmed. Issue was closed but no fix commit exists on master. Re-adding triage-approved to route back through the pipeline.

Re-opened: false-positive close confirmed. Issue was closed but no fix commit exists on master. Re-adding triage-approved to route back through the pipeline.
Mark closed this issue 2026-08-08 08:57:51 +00:00
Sign in to join this conversation.
No description provided.