Generalize change proposals and moderation across memories, project instructions and tasks #226

doneCreated by Codex (User hu_yMavF3p1) • Assigned to Codex (User hu_yMavF3p1) • Normal priority

Description

Goal

One proposal/review workflow for project memories, Project Instructions and tasks. Contributors suggest changes; only approval changes published content. Dashboard and MCP share services and permissions.

Context

Memory revisions already support reviews. Instructions publish directly for owners/moderators (MCP push implemented in efd71aa; verify deployment). Tasks have direct writes/version checks only. Coordinate with #205 (task visibility), #213 (canonical references), #97 (closeout suggestions) and #76 (task rules).

Model and lifecycle

  • Common proposal: stable public ID, projectId, target kind/reference, operation, base revision/version, typed changes, explanation, author/agent, timestamps, decision/reason and concurrency version.
  • Pending -> approved/rejected/withdrawn. Authors may withdraw pending proposals; revised submissions are immutable revisions. Distinguish proposer from reviewer.
  • Canonical project references for memories/tasks; projectId for instructions. Do not guess internal IDs or confuse proposal IDs with task numbers.
  • Retain proposals for new shared/public memories; support updates to all three types and initial Instructions publication. Task fields: title, description, status, priority, assignment. Omitted fields preserve values; null follows existing clearing rules.
  • Approval atomically rechecks target, base version, submitter/reviewer access and domain rules, then publishes once. Stale proposals show conflicts and require explicit rebase/resubmission.
  • Pending/rejected/withdrawn content never becomes current content, recall guidance, ready work or assignment state.

Permissions

  • Define/test each type's matrix for readers, contributors, owners/moderators and authorized external public-project contributors, combined with MCP grants.
  • Public visibility alone grants no write/review rights. Reuse authorized public contributions; task access follows its own policy.
  • Preserve direct edit rights and normal task operations. Submission is explicit; do not silently convert direct writes into proposals or force review of every task action.
  • Read-only keys cannot submit. Review requires moderation and publication rights. Authorship alone grants no self-approval.
  • Protect text, diffs, history, counts, exports and live events using target access; recheck revocation and privacy restrictions.

Dashboard and MCP

  • Unified Moderation queue: project/type/status filters, author, explanation, base/current/proposed diff, conflicts, approve/reject actions.
  • Eligible contributors get Suggest changes on readable targets and a pending receipt/link. Preserve drafts during live updates.
  • Provide proposal_create/list/get/review/withdraw contracts with public IDs, expected versions, bounded pagination and actionable errors; align final names with existing tools.
  • Adapt memory submission/review APIs without breaking clients or duplicating queues/reviews.

Migration and acceptance

  • Preserve pending/rejected/approved memory revisions, published pointers and attribution. Map reviews once; no automatic approval or data loss.
  • Approved task changes run existing validators: assignment references, statuses, open-child completion constraints, access and implemented blocker rules.
  • MSTest/service and HTTP MCP coverage per type: submit/read/approve/reject/withdraw, forbidden roles/grants, stale bases, concurrent reviewers, failed-publication rollback, archived/deleted targets and revoked access.
  • Test migration fixtures, legacy clients and pending-content isolation across queries/exports.
  • Verify desktop/mobile review, editing, navigation and live updates without lost drafts.
  • Deliver implementation, migration/recovery notes, agent guidance and committed tests. Deployment is a separate rollout step.
Connection interrupted or session ended. Reload

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.