Skip to content

feat: add base branch change notification and blocked-by dependency deferral (CYPACK-978)#1004

Open
cyrusagent wants to merge 2 commits intomainfrom
cypack-978
Open

feat: add base branch change notification and blocked-by dependency deferral (CYPACK-978)#1004
cyrusagent wants to merge 2 commits intomainfrom
cypack-978

Conversation

@cyrusagent
Copy link
Copy Markdown
Contributor

@cyrusagent cyrusagent commented Mar 17, 2026

Assignee: Connor Turland

Summary

Adds two related session lifecycle features for smarter issue handling:

  1. Base branch change notification — When a tracked base branch receives new commits via GitHub push webhooks, active sessions on that branch are notified to rebase via addStreamMessage, helping avoid merge conflicts.

  2. Blocked-by dependency deferral — When Cyrus is assigned an issue with unresolved blocked_by relationships, it skips worktree/runner creation and parks the session. Parked sessions wake automatically when all blocking issues complete (or are canceled), or when a user re-prompt clears the blockers.

Implementation

Use Case 1: Base branch push notification

  • Added push event type to GitHubEventTransport with new GitHubPushPayload / GitHubPushCommit types
  • Created GitHubCommentWebhookEvent narrowing type to keep comment-specific utility functions type-safe
  • Added getSessionsByBaseBranch(branchName, repositoryId) query to AgentSessionManager
  • Added handleGitHubPushWebhook to EdgeWorker — extracts branch from refs/heads/*, finds matching repo config, looks up active sessions, builds XML notification with commit summary, streams to running session

Use Case 2: Blocked-by dependency deferral

  • Added isIssueStateChangeWebhook type guard to cyrus-core for detecting stateId changes in updatedFrom
  • Added parkedSessions Map to EdgeWorker (keyed by issue ID, stores all data needed to replay initializeAgentRunner)
  • Added blocked-by guard in handleAgentSessionCreatedWebhook — calls checkBlockedByDependencies before starting work
  • Added handleIssueStateChange handler — when blocking issues complete, removes them from parked sessions and wakes fully-unblocked sessions
  • Added handleParkedSessionReprompt (Branch 1.5 in prompted handler) — re-checks blockers on user re-prompt
  • Added postThoughtActivity to ActivityPoster for posting acknowledgments

Files Changed

  • packages/github-event-transport/src/types.ts — Push event types, comment-narrowing types
  • packages/github-event-transport/src/index.ts — New exports
  • packages/github-event-transport/src/GitHubEventTransport.ts — Push event processing
  • packages/github-event-transport/src/GitHubMessageTranslator.ts — Type narrowing for event type
  • packages/github-event-transport/src/github-webhook-utils.ts — Narrowed to GitHubCommentWebhookEvent
  • packages/core/src/issue-tracker/types.tsisIssueStateChangeWebhook type guard
  • packages/core/src/index.ts — New export
  • packages/edge-worker/src/EdgeWorker.ts — All handler logic (push, blocked-by, parked sessions, wake-up)
  • packages/edge-worker/src/AgentSessionManager.tsgetSessionsByBaseBranch query
  • packages/edge-worker/src/ActivityPoster.tspostThoughtActivity method

Testing

  • 12 new tests added:
    • 5 tests for getSessionsByBaseBranch (AgentSessionManager.base-branch-sessions.test.ts)
    • 7 tests for isIssueStateChangeWebhook (EdgeWorker.issue-state-change.test.ts)
  • All 640 edge-worker tests pass
  • All package tests pass (pnpm test:packages:run)
  • TypeScript type checking clean (pnpm typecheck)

Linear Issue

CYPACK-978: Base branch change notification + blocked-by dependency deferral

…eferral (CYPACK-978)

Add two session lifecycle features:

1. Base branch push notification: GitHub push webhooks on tracked base branches
   stream rebase notifications to active sessions via addStreamMessage.

2. Blocked-by dependency deferral: Issues with unresolved blocked-by relations
   are parked instead of starting a runner. Parked sessions wake automatically
   when blocking issues complete, or on user re-prompt if blockers clear.
@cyrusagent cyrusagent changed the title feat: base branch change notification + blocked-by dependency deferral (CYPACK-978) feat: add base branch change notification and blocked-by dependency deferral (CYPACK-978) Mar 17, 2026
@cyrusagent cyrusagent marked this pull request as ready for review March 17, 2026 23:21
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