Skip to content

GUI CRUD incomplete: Delete missing for portfolios/programs/work-items/goals/sprints/kanban despite backend DELETE endpoints; boards lack backend Update/Delete entirely #12695

Open

Description

@mrveiss

Summary

The company-OS (LLC) GUI is not CRUD-complete: users can Create and Edit every entity, but cannot Delete most of them from the UI — even though the backend exposes a DELETE endpoint for each. Entities therefore accumulate with no removal path (the same class as #12212 for companies). One entity (boards/kanban) also lacks Update/Delete on the backend.

The CRUD matrix (verified live + in source)

entity backend GUI-Create GUI-Edit GUI-Delete
companies CRUD ✅ ✅ ❌ (archive only, no delete — #12212)
portfolios CRUD ✅ ✅ ❌
programs CRUD ✅ ✅ ❌
projects CRUD ✅ ✅ ✅
work-items CRUD ✅ ✅ ❌
goals CRUD ✅ ✅ ❌
sprints CRUD ✅ ✅ ❌
kanban/boards CR-- ✅ ❌ ❌ (backend has no PUT/DELETE either)
routines CRUD ✅ ✅ ✅
backlog (work-items) ✅ ✅ ✅

Delete is missing from the GUI for portfolios, programs, work-items, goals, sprints, and kanban. Create and Edit are present everywhere.

Evidence

Backend DELETE endpoints exist for every gap entity:

DELETE /api/llc/portfolios/{portfolio_id}
DELETE /api/llc/programs/{program_id}
DELETE /api/llc/work-items/{work_item_id}
DELETE /api/llc/goals/{goal_id}
DELETE /api/llc/sprints/{sprint_id}

But the frontend makes no delete call to any of them — checked across all of autobot-frontend/src (.delete( to these endpoints): none for portfolio, program, work-item, goal, sprint, or kanban. The incidental "delete" string matches in the views are unrelated (no wired action). Views exist for every entity (PortfolioBrowserView, ProgramBrowserView, WorkItemDetail, GoalTree, SprintBoardView, KanbanBoardView, …) and each has Create + Edit affordances — Delete is the consistent omission.

boards/kanban is worse: the backend board API is CR-- (list + create only — no PUT/DELETE), so the kanban board itself can't be renamed or removed even via API.

Impact

Medium-high for a management product. The whole point of a portfolio/program/project/sprint/backlog hierarchy is lifecycle management, and half of it (removal) is unreachable from the UI:

Recommendation

  1. Add Delete (with confirm) to every entity view whose backend supports it: portfolios, programs, work-items, goals, sprints. The endpoints already exist — this is pure frontend wiring.
  2. Boards need backend Update+Delete first (PUT/DELETE /api/llc/boards/{id}), then a UI affordance — this is a backend gap, not just frontend.
  3. Prefer soft-delete/archive where audit history matters (goals, work-items with history), hard-delete where not — but expose some removal path in every case.
  4. Add a GUI-CRUD-completeness check to the api-wiring discipline: for every entity with a backend DELETE, assert the frontend has a corresponding wired action — this class of gap is mechanically detectable.

Environment

install.sh deploy at /opt/autobot. Backend CRUD from live openapi.json; GUI coverage from autobot-frontend/src LLC views. Related: #12212 (company delete), #12213 (kanban UI), #12309 (archived dead-end).

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions