Skip to content

fix: issues #498–#521 (heartbeat, pipeline, notify, registry, PR validation)#4

Merged
aleks1k merged 44 commits intomainfrom
develop/issue-sweep-2026-04
Apr 22, 2026
Merged

fix: issues #498–#521 (heartbeat, pipeline, notify, registry, PR validation)#4
aleks1k merged 44 commits intomainfrom
develop/issue-sweep-2026-04

Conversation

@aleks1k
Copy link
Copy Markdown
Member

@aleks1k aleks1k commented Apr 22, 2026

Summary

Stacked integration work on develop/issue-sweep-2026-04 plus fixes aligned with laurentenhoor/devclaw issues:

Issue Change
laurentenhoor#498 Health: zombie_slot when active + live session but missing startTime; skip stall when gateway updatedAt missing
laurentenhoor#499 fetchGatewaySessions: default timeout when undefined; heartbeat tick passes explicit 15s
laurentenhoor#501 Pipeline: MERGE_PR failure aborts completion (no label transition after failed merge)
laurentenhoor#513 work_finish: optional projectSlug (alternative to channelId)
laurentenhoor#518 getPrStatusByUrl + explicit prUrl validation for follow-up PRs
laurentenhoor#520 notify: runtime failure falls back to openclaw message send; pipeline passes runCommand
laurentenhoor#521 Migrate: restore empty devclaw/projects.json from legacy projects.json if needed

Notes

  • Does not reuse or require any chat-exposed token; pushes use configured gh auth.
  • Please rotate any PAT that was pasted in chat.

Closes laurentenhoor#498 laurentenhoor#499 laurentenhoor#501 laurentenhoor#513 laurentenhoor#518 laurentenhoor#520 laurentenhoor#521

Made with Cursor

ironyh and others added 30 commits March 8, 2026 01:37
Fixes based on GitHub Copilot review comments on PR laurentenhoor#502:

1. getMergedMRUrl(): Now filters on pr.state === 'merged' before returning URL
2. ensureLabel(): Throws actionable error instead of silent no-op
3. listIssues(): Handles opts.state === 'all' explicitly
4. reopenIssue(): Best-effort implementation (try/catch) to prevent workflow breakage
5. addComment(): Implemented via 'tea issue comment create' CLI command

These changes improve robustness and ensure the provider follows the
IssueProvider contract correctly.
Adds optional messageThreadId parameter through the notification chain:
Channel type -> resolveNotifyChannel -> notify -> sendMessage -> Telegram API.

This enables per-topic routing in Telegram forum groups, where each project
can have notifications sent to a specific forum topic instead of the main chat.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a new "issueComplete" notification event type that fires when an issue
is closed via the CLOSE_ISSUE completion action. This provides visibility
into the final delivery milestone of the pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…name

When a project is registered with a mixed-case name (e.g. 'UpMoltWork'),
the session key was built using project.name, resulting in keys like:
  agent:main:subagent:UpMoltWork-developer-junior-annabelle

However, the gateway stores and looks up session keys case-sensitively,
and new sessions are created with lowercase keys. This mismatch caused
the heartbeat to not find the active session, consider the worker dead,
and re-dispatch — resulting in workers being restarted every heartbeat cycle.

Fix: use project.slug (which is always lowercase) to build the session key.
Falls back to project.name.toLowerCase() for safety.

Fixes: worker restart loop on projects with mixed-case names
…nish tool. Updated the logic for finding active slots to ensure case-insensitive comparison of session keys, enhancing the accuracy of slot matching for the current session.
This update introduces support for the optional messageThreadId parameter across various project resolution functions and tools, enabling topic-aware routing for Telegram channels. Key changes include:

- New function `resolveProjectChannelScope` for building stable scope keys.
- Updates to `resolveProjectSlug` and `getProject` to handle scoped inputs.
- Migration logic for normalizing legacy topic fields in projects.
- Adjustments in admin tools to accommodate messageThreadId for channel linking, un-linking, and listing.

These enhancements improve the flexibility and accuracy of project management within chat environments, particularly for Telegram forum topics.
This update introduces the `notifyTarget` parameter in the dispatch and agent communication processes, allowing for more precise routing of messages to specific Telegram channels and topics. Key changes include:

- Addition of `notifyTarget` in the `dispatchTask` and `sendToAgent` functions.
- Implementation of `applyNotifyRoutingToGatewayParams` to handle the new routing logic.
- Updates to project migration logic to ensure legacy topic fields are correctly normalized.

These enhancements improve the flexibility of message delivery within Telegram environments, particularly for forum topics.
fujiwaranosai850 and others added 14 commits April 21, 2026 11:26
… Gitea + target in createProvider

Made-with: Cursor
…pipeline, notify, registry, PR validation)

- laurentenhoor#498: heal slots active without startTime (zombie_slot), skip stall without updatedAt
- laurentenhoor#499: gateway session fetch uses default timeout when ms is undefined; explicit 15s in tick
- laurentenhoor#501: abort completion when MERGE_PR action fails (no silent label transition)
- laurentenhoor#513: work_finish accepts projectSlug as alternative to channelId
- laurentenhoor#518: optional getPrStatusByUrl + explicit prUrl validation for follow-up PRs
- laurentenhoor#520: notify fallback to CLI when runtime send fails; pass runCommand from pipeline
- laurentenhoor#521: reconcile empty devclaw/projects.json from legacy registry files

Made-with: Cursor
@aleks1k aleks1k merged commit 46f0d52 into main Apr 22, 2026
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.

Heartbeat health check misses zombie sessions after API 529 (overloaded)

5 participants