feat(flows): NF-6 Phase 5A — slash-commands-other baked-in flow #387

Merged
charles merged 1 commit from feat/flows-slash-commands-batch into main 2026-04-26 15:47:16 +00:00
Collaborator

Summary

Closes the slash-breakdown cutover-gate scope problem documented in PR #383. Phase 4D shipped slash-breakdown for /breakdown only, but the cutover gate node_flows.suppress_legacy: ["issue_comment.slash_command"] collapses ALL slash commands to one trigger kind — flipping it would have skipped /hold, /no-ready, /ready, /raise-cap, /unassign since the legacy switch arm at webhook.ts:320-330 handles them all in one block.

Ships

  1. New helper handleSlashCommandOther in webhook-handlers.ts wraps the four arms above the /breakdown branch in legacy handleIssueComment (lines 213-265). Trust-gated, side-effect only.
  2. New flow node slash.handle_command_other (monolithic — same shape as slash.handle_breakdown from Phase 4D).
  3. New baked-in flow slash-commands-other filtered on command.command in {hold, no-ready, ready, raise-cap, unassign}.

Combined with slash-breakdown, the two flows now cover every command the legacy case "issue_comment" arm handles. Cutover gate flip is safe.

Test plan

  • 16 e2e tests: each command + breakdown filter-out + unknown-command filter-out + rawBody trim + not-wired guard
  • Full flows suite: 346 pass / 0 fail
  • Server typecheck clean
  • AGENT_NODE_COUNT bumped from 16 to 17

Phase 5 cutover plan

This is Phase 5A. Phase 5B (rewire onAssignedReady callback) + Phase 5C (flip suppressions + delete legacy) ship next as one atomic PR.

🤖 Generated with Claude Code

## Summary Closes the slash-breakdown cutover-gate scope problem documented in PR #383. Phase 4D shipped `slash-breakdown` for `/breakdown` only, but the cutover gate `node_flows.suppress_legacy: ["issue_comment.slash_command"]` collapses ALL slash commands to one trigger kind — flipping it would have skipped `/hold`, `/no-ready`, `/ready`, `/raise-cap`, `/unassign` since the legacy switch arm at `webhook.ts:320-330` handles them all in one block. ## Ships 1. **New helper `handleSlashCommandOther`** in `webhook-handlers.ts` wraps the four arms above the `/breakdown` branch in legacy `handleIssueComment` (lines 213-265). Trust-gated, side-effect only. 2. **New flow node `slash.handle_command_other`** (monolithic — same shape as `slash.handle_breakdown` from Phase 4D). 3. **New baked-in flow `slash-commands-other`** filtered on `command.command in {hold, no-ready, ready, raise-cap, unassign}`. Combined with `slash-breakdown`, the two flows now cover every command the legacy `case "issue_comment"` arm handles. Cutover gate flip is safe. ## Test plan - [x] 16 e2e tests: each command + breakdown filter-out + unknown-command filter-out + rawBody trim + not-wired guard - [x] Full flows suite: 346 pass / 0 fail - [x] Server typecheck clean - [x] AGENT_NODE_COUNT bumped from 16 to 17 ## Phase 5 cutover plan This is **Phase 5A**. Phase 5B (rewire `onAssignedReady` callback) + Phase 5C (flip suppressions + delete legacy) ship next as one atomic PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(flows): NF-6 Phase 5A — slash-commands-other baked-in flow
All checks were successful
qa / qa (pull_request) Successful in 6m21s
qa / dockerfile (pull_request) Successful in 13s
56e53f29e6
Closes the slash-breakdown cutover-gate scope problem documented in
PR #383. Phase 4D shipped `slash-breakdown` for `/breakdown` only, but
the cutover gate `node_flows.suppress_legacy: ["issue_comment.slash_command"]`
collapses ALL slash commands to one trigger kind — flipping it would
have skipped `/hold`, `/no-ready`, `/ready`, `/raise-cap`, `/unassign`
since the legacy switch arm at `webhook.ts:320-330` handles them all
in one block.

Ships:
1. New helper `handleSlashCommandOther` in webhook-handlers.ts that
   wraps the four arms above the `/breakdown` branch in legacy
   `handleIssueComment` (lines 213-265). Trust-gated, side-effect
   only (no task dispatch). Returns `true` when a command matched.
2. New flow node `slash.handle_command_other` (monolithic — same
   shape as `slash.handle_breakdown` from Phase 4D).
3. New baked-in flow `slash-commands-other` filtered on
   `command.command in {hold, no-ready, ready, raise-cap, unassign}`.

Combined with `slash-breakdown`, the two flows now cover every
command the legacy `case "issue_comment"` arm handles. Cutover gate
flip is safe.

Tests: 16 e2e tests covering each command + breakdown filter-out +
unknown-command filter-out + rawBody trim + not-wired guard.
AGENT_NODE_COUNT bumped from 16 to 17.

This is Phase 5A of the cutover plan. Phase 5B + 5C ship next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
charles deleted branch feat/flows-slash-commands-batch 2026-04-26 15:47:16 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks!387
No description provided.