Severity: high | Category: data-integrity | Phase: P0.13
Problem
Verified: tasks.delete does not remove the deleted id from other tasks' depends_on, and the delete_cascade() it points users to does not exist anywhere. A dependent keeps a depends_on entry pointing at a deleted task; get_ready_tasks requires deps.issubset(completed_tasks), so the dependent can never become ready — deleting a task silently and permanently strands its dependents.
Evidence
codeframe/cli/app.py:2262, codeframe/core/tasks.py:739 (dangling delete_cascade() reference)
Acceptance criteria
- Deleting a task strips its id from all dependents'
depends_on (default or via --cascade), OR deletion is blocked/prompted when dependents exist.
- The dangling
delete_cascade() docstring reference is resolved (implemented or removed).
- Test: after deleting a dependency, the former dependent is reachable/ready.
Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).
Severity: high | Category: data-integrity | Phase: P0.13
Problem
Verified:
tasks.deletedoes not remove the deleted id from other tasks'depends_on, and thedelete_cascade()it points users to does not exist anywhere. A dependent keeps adepends_onentry pointing at a deleted task;get_ready_tasksrequiresdeps.issubset(completed_tasks), so the dependent can never become ready — deleting a task silently and permanently strands its dependents.Evidence
codeframe/cli/app.py:2262,codeframe/core/tasks.py:739(danglingdelete_cascade()reference)Acceptance criteria
depends_on(default or via--cascade), OR deletion is blocked/prompted when dependents exist.delete_cascade()docstring reference is resolved (implemented or removed).Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).