generated from coulomb/repo-seed
feat(capability-requests): add routing dispute & reroute workflow (CUST-WP-0027)
Adds a structured dispute mechanism when capability request routing is wrong:
- New `routing_disputed` status with four DB columns (dispute_reason, disputed_by,
dispute_suggested_domain, disputed_at) via Alembic migration m0h1i2j3k4l5
- POST /capability-requests/{id}/dispute — any party can flag misrouting with a reason
and optional suggested domain; notifies custodian + current fulfilling domain
- POST /capability-requests/{id}/reroute — custodian re-routes to correct domain via
catalog_entry_id or direct slug; appends audit trail to routing_note; resets to requested
- Two new MCP tools: dispute_capability_routing and reroute_capability_request
- Dashboard: amber disputed-banner at top of Summary, routing_disputed Kanban column,
dispute details (reason, suggested domain, raised-by) shown on disputed cards
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
"""Add dispute columns to capability_requests
|
||||
|
||||
Revision ID: m0h1i2j3k4l5
|
||||
Revises: l9g0h1i2j3k4
|
||||
Create Date: 2026-03-21
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = 'm0h1i2j3k4l5'
|
||||
down_revision = 'l9g0h1i2j3k4'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column('capability_requests', sa.Column('dispute_reason', sa.Text(), nullable=True))
|
||||
op.add_column('capability_requests', sa.Column('disputed_by', sa.String(100), nullable=True))
|
||||
op.add_column('capability_requests', sa.Column('dispute_suggested_domain', sa.String(100), nullable=True))
|
||||
op.add_column('capability_requests', sa.Column('disputed_at', sa.DateTime(timezone=True), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_column('capability_requests', 'disputed_at')
|
||||
op.drop_column('capability_requests', 'dispute_suggested_domain')
|
||||
op.drop_column('capability_requests', 'disputed_by')
|
||||
op.drop_column('capability_requests', 'dispute_reason')
|
||||
Reference in New Issue
Block a user