Skip to content

feat: portfolio_cancel_feature — PM-side task cancel on a team board (v0.14.7)#31

Merged
mabry1985 merged 1 commit into
mainfrom
feat/pm-cancel-feature
Jul 3, 2026
Merged

feat: portfolio_cancel_feature — PM-side task cancel on a team board (v0.14.7)#31
mabry1985 merged 1 commit into
mainfrom
feat/pm-cancel-feature

Conversation

@mabry1985

Copy link
Copy Markdown
Contributor

Closes #27. The sharpest gap from Roxy's operational experience: she could portfolio_dispatch but never un-dispatch — her task_close failed with 'unknown issue' because the PM has no write path to a team's board.

Behavior

portfolio_cancel_feature(board, feature_id, reason='') POSTs to the team's project_board /features/{id}/cancel over the same bearer the reads already use (the write twin of _fetch_board_features), moving the feature to the terminal cancelled lane so the team stops working it and it clears from the active view. The managed repo + any PR already opened are untouched; the optional reason is recorded in the board's audit.

Direct project_board API (not an A2A instruction to the lead) because canceling is a mechanical board write, and the PM already talks to the team's project_board API for reads — consistent and deterministic.

Pairs with the dispatch dedup (#25): together they give the PM real supervisory control over a team's queue — don't stack duplicates, and cancel what's stuck.

Tests

Posts to the right /features/{id}/cancel URL with the bearer + reason; unknown board; a 404/HTTP error surfaces cleanly. 119 tests pass; ruff clean. v0.14.6 → v0.14.7.

🤖 Generated with Claude Code

…eam board (v0.14.7)

Roxy's task_close failed with 'unknown issue' because the PM had no write path
to a team's board — she could dispatch but never cancel or recover a stuck/
duplicate task. portfolio_cancel_feature(board, feature_id, reason='') POSTs to
the team's project_board /features/{id}/cancel over the SAME bearer the reads
use (the write twin of _fetch_board_features), moving the feature to the
terminal 'cancelled' lane so the team stops working it. The managed repo + any
PR already opened are untouched. Pairs with the dispatch dedup (#25) to give
the PM real supervisory control over a team's queue.

Closes #27.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@protoquinn

protoquinn Bot commented Jul 3, 2026

Copy link
Copy Markdown

👀 Quinn is reviewing — verdict (PASS / WARN / FAIL) + findings to follow.

@mabry1985 mabry1985 merged commit 6ec783a into main Jul 3, 2026
1 check passed
@mabry1985 mabry1985 deleted the feat/pm-cancel-feature branch July 3, 2026 03:31

@protoquinn protoquinn Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA Audit — PR #31 | feat: portfolio_cancel_feature — PM-side task cancel on a team board (v0.14.7)

VERDICT: WARN (pending CI — test is queued)


CI Status

  • test: queued ⏳

Diff Review

  • Clean addition: _cancel_board_feature mirrors _fetch_board_features in structure — same bearer, security policy check, httpx timeout, error-handling pattern
  • portfolio_cancel_feature tool follows existing conventions: board lookup via _remote_by_name, _BoardUnavailable caught and formatted as error string, happy path returns json.dumps
  • Version bump 0.14.6 → 0.14.7 consistent across __init__.py, pyproject.toml, protoagent.plugin.yaml
  • Tool registration includes portfolio_cancel_feature in the return list and the test assertions

Observations

  • LOW: clawpatch structural review unavailable for this repo (not in project registry) — diff reviewed manually; no issues found
  • GAP: CI still queued — formal PASS/FAIL deferred until checks complete. No blocking findings in the diff itself.

— Quinn, QA Engineer

@protoquinn

protoquinn Bot commented Jul 3, 2026

Copy link
Copy Markdown

Submitted COMMENT review on #31 — pending CI. The diff is clean; the formal PASS will land once test completes.

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