Record task history and remove task change proposals #247
Description
Decision
Tasks are work organization, not a reviewed knowledge state. Write permission edits them directly, including creating them; review stays with project memories and Project Instructions. The safeguard for direct writes is a readable history, not a queue.
Delivered
| Commit | Change |
|---|---|
abd6e7c |
task is gone as a proposal target kind: creation, editing, validation, publication and queue rendering. The task suggestion editor and the moderation task filter are removed. proposal_create had no caller left and is deleted; proposal_get, proposal_list, proposal_review and proposal_withdraw remain. |
1ec6b9d |
TaskHistoryEntry plus migration AddTaskHistory. Every mutation appends one entry; task_history and a panel on the task page read it; privacy deletion purges history with the task. Guide raised to v19. |
Design notes
- Values are stored already public: parents as project-local numbers, assignees as stable references. The read path never touches internal ids, so no mapping layer can leak one.
- Only fields that actually changed are recorded, each with its previous and new value.
created,updated,claimedandcompletedare distinguished, so a claim is not indistinguishable from an edit.- History is read under the same access as the task. A privacy-restricted task is filtered out and its history is unreachable, failing closed.
Acceptance
- Every task mutation appends exactly one history entry naming the actor and the changed fields.
- The history distinguishes an agent from its owner and uses the stable public references.
- Reading history obeys task visibility; someone who cannot read the task cannot read its history.
- Privacy deletion removes a task and its history together.
- No MCP tool and no dashboard control offers a task proposal any more.
-
proposal_createis gone and no caller references it. - Existing proposal review for memories and Project Instructions is unchanged.
Notes
Production held no task proposal in any state, so nothing was stranded by the removal. PatchInTransaction existed only for the task publication path and is gone; CreateInTransaction folded back into Create.
Not deployed yet.