Clear Filters
ID Title Status Priority Created Due Date Actions
#58 FTX-58: Terminal outcome envelope (UB-OUT-1)
build_outcome_envelope(): decision_id/tenant/status/policy/context_hash/outcome{result,reasons,justi...
closed high 2026-07-23 15:08 -
#56 FTX-56: SLA/escalation worker loop
Tasks past sla_deadline FOR UPDATE SKIP LOCKED; escalation path entries remind/notify_manager/reassi...
closed high 2026-07-23 15:08 -
#55 FTX-55: Mail drainer with mint-at-send
Tokens minted at send time in drainer - outbox rows carry NO token material (UB-TOK-4); skip obsolet...
closed critical 2026-07-23 15:08 -
#54 FTX-54: Durable webhook outbox + drainer + subscriptions CRUD
enqueue_webhook writes webhook_deliveries in caller transaction (replaces fire-and-forget asyncio.cr...
closed critical 2026-07-23 15:08 -
#53 FTX-53: Expiry worker loop
ACTIVE-status decisions past expires_at batch FOR UPDATE SKIP LOCKED -> terminalize(timed_out) or po...
closed high 2026-07-23 15:08 -
#52 FTX-52: Worker runtime process + futex-worker.service
python -m app.workers.main: N independent asyncio loops (expiry/sla/mail/webhook/token_cleanup/runfl...
closed critical 2026-07-23 15:08 -
#51 FTX-51: SLA deadlines at creation + delegation caps
tasks.sla_deadline set from step.sla ISO-8601 at instantiation (currently never set -> SLA dead code...
closed high 2026-07-23 15:08 -
#50 FTX-50: Policy versioning + snapshot + validation
policies version/status(draft|active|disabled)/key columns; decision stores policy_snapshot JSONB at...
closed high 2026-07-23 15:08 -
#49 FTX-49: Separation of Duties full enforcement
Assignment-time filter + action-time mutual-exclusion vs prior actors from actions table; EV-TSK-2 n...
closed high 2026-07-23 15:08 -
#48 FTX-48: Idempotency upsert
UNIQUE(tenant_id, idempotency_key) migration (current index non-unique) + INSERT ON CONFLICT DO NOTH...
closed high 2026-07-23 15:08 -
#47 FTX-47: Multi-stage progression
decisions.current_stage_index + instantiate_stage() in same transaction as stage completion; termina...
closed critical 2026-07-23 15:08 -
#46 FTX-46: apply_action rewrite with row locking
Single transaction: lock decision FOR UPDATE then task FOR UPDATE (global lock order); guard non-ter...
closed critical 2026-07-23 15:08 -
#45 FTX-45: Quorum engine fixes
n_of_m reads n_required (schema field, currently reads nonexistent step.n so n=1 always); only persi...
closed critical 2026-07-23 15:08 -
#44 FTX-44: Decision/task state machine + transition guards
domain/statemachine.py DECISION_TRANSITIONS/TASK_TRANSITIONS/TERMINAL/ACTIVE (UB-SM-1/2); guard_tran...
closed critical 2026-07-23 15:08 -
#43 FTX-43: SSRF guard rewrite + secret hygiene
net_guard resolve-validate-pin (closes DNS rebinding TOCTOU); WEBHOOK_ALLOW_HOSTS env replaces hardc...
closed high 2026-07-23 15:08 -
#42 FTX-42: Rate limiting
Redis fixed-window limiter per key/tenant/IP; 429 + error shape + headers (UB-API-8). Unauthenticate...
closed high 2026-07-23 15:08 -
#41 FTX-41: CSRF + Action Web session + OTP in Redis
Signed HttpOnly session cookie on review GET + double-submit CSRF on all Action Web POSTs (UB-AW-6, ...
closed high 2026-07-23 15:08 -
#40 FTX-40: Capability token hardening
HITL_TOKEN_SECRET mandatory in prod (delete futex-dev-secret fallback + master-key reuse); verify te...
closed critical 2026-07-23 15:08 -
#39 FTX-39: Fail-closed tenant scoping sweep
Frozen Principal dataclass; eliminate every principal.get('tenant_id','default') fallback (CI grep g...
closed critical 2026-07-23 15:08 -
#38 FTX-38: Delete unauthenticated one_click_approve/reject routes
Remove GET /v1/tasks/{id}/one_click_approve|reject (main.py:643-664) - no auth, no token, no tenant ...
closed critical 2026-07-23 15:08 -
Previous Page 3 of 5 Next