feat(flows): NF-6 Phase 1C — outstanding-changes-requested address-review pivot #379
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!379
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/flows-address-review-pivot"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 1C — closes the second remaining cutover blocker for
suppress_legacy: ["issue.assigned"]. With this PR + #378 (multi-assignee fan-out, already merged), the default flow mirrors every guard rail of legacydispatchIssueForAgent.Why
Legacy
dispatchIssueForAgent(webhook-handlers.ts:516-525) probes the issue's linked PR for an outstandingREQUEST_CHANGESreview against the current head SHA. When found, it pivotsimplement→address-reviewand aims the worktree atpr.headRef. Without this, dep-closure cascades and operator assignee-bounces would re-fireimplementon a PR awaiting review comments — dev would read "PR exists, CI green", QA, exit. Head SHA never changes, review loop wedges (issue #270).What
forge.detect_outstanding_change_requestnode — wraps the exporteddetectOutstandingChangeRequestlegacy fn. Two output ports:pivotcarries{ prNumber, headRef, headSha }envelope;no_pivotcarriestrue. Exactly one is non-FILTER_DROP per execution.gateinput added toagent.render_skill— authors wire any FILTER_DROP-bearing upstream as a binary skip signal. Handler ignores the value; executor's FILTER_DROP propagation does the work.flow-dispatch.ts::defaultArgInjectionswires the production injection (envelope→ResolvedAgent cast).default-graph.jsonv4: pipeline forks afterdetect_pivot—no_pivot→render_implement→dispatch_implement;pivot→render_address_review(skill="address-review", branch=pr.headRef)→dispatch_address_review(branch_prefix=pivot.headRef).Tests
branch_prefix === pr.headRef; detector throw aborts dispatch withstatus: "error"and zero side effects.Cutover progress
changes_requested→address-reviewpivotAfter this PR + a soak window of zero divergence on
GET /flows/divergence/summary,node_flows.suppress_legacy: ["issue.assigned"]is finally safe to set. Phase 4 (the remaining 7 NF-6 flows for other triggers) is the last block before legacy can be deleted entirely.🤖 Generated with Claude Code