Skip to content

P5.6: document removal keeps content; who may remove and what 'stops new content' means #195

Open

Description

@dezren39

Phase 5, P5.6 (content on removal). Commits 781ac3b8 (red tests) and b3b63f1f (implementation) on branch p5-removal.

What is built (design decision 4: content kept)

  • A removal is a signed document.remove event. Its header field removes names the document.put event ID. It takes no body and carries no tag or document.
  • Nothing is deleted. The removal event stays in the store. The document, its blob, and its tags are unchanged, and the blob gate is unchanged.
  • EventStore::documents() sets DocumentRecord::removal when the document's own author signed a removal for it. The check runs at read time, so replicas agree whatever the arrival order.

Point chosen: who may remove

  • Only the document's author. The document has no group link yet, so a group Admin or Manage cannot be checked. A removal from anyone else is stored and has no effect.

Open points

  1. Group removal. An Admin or Manage removing a document needs the document-to-group link. That link is not in the model yet.
  2. "Removal stops new content" is not enforced. Decision 4 does not say which new content is refused, tags on the document or new documents from a removed member. Proposed: a tag on a removed document is void only if its author had seen the removal (causal past). Concurrent tags are kept.
  3. Conflict with the P5.6 brief. The brief asked for the blob to be refused to every peer after removal, and for a replica to drop its bytes. Decision 4 and task 10 item 4 say keep by default, with hiding only behind an explicit flag. Not built. Owner to confirm keep, or add the explicit hide flag.

Acceptance criteria

  • The owner decision on open point 3 is recorded: keep-content-by-default (decision 4 / task 10 item 4) confirmed, or an explicit hide flag is specified and built.
  • "Removal stops new content" has a defined meaning: which new content is refused (tags on a removed document and/or new documents), with the causal-past rule for concurrent tags either adopted or replaced, and tests covering it.
  • Group removal (Admin/Manage) is either implemented once the document-to-group link exists, or explicitly deferred with the dependency named.
  • Behavior for removals signed by non-authors (stored, no effect) remains covered by tests.

Activity

  1. dezren39 commented on Oct 24, 2026

    @dezren39
    MemberAuthor

    id train triage (2026-10-24): needs-decision — project owner: document-removal semantics (who may remove, what "stops new content" means); implementation on branch p5-removal.

  2. added
    kind/questionQuestion or design decision to resolve
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/mMedium: expected under 1 day of work
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    user/reviewNeeds a user-look: Muse reviews first and handles what it can
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 27, 2026
  3. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Intake review

    Phase 5 (P5.6) design issue: the removal event and author-only rule are built on branch p5-removal per the body, but three points were left open — group removal (needs the document-to-group link, not yet in the model), the meaning of 'removal stops new content', and a direct conflict with the P5.6 brief on blob refusal that needs the owner to confirm keep-by-default or specify a hide flag. Still live; point 3 is a decision for Drew/Muse, hence user/review.

    Risks: Removal semantics are consensus-visible: replicas must agree on tag validity regardless of arrival order, so the causal-past choice needs tests, not just prose.
    Suggested approach: Owner settles point 3 and the 'stops new content' definition on this issue; then a small implementation pass adds the causal-past tag rule with arrival-order tests.
    Related: Phase 5 siblings in this repo (P5.x issues, Oct 12 batch); implementation commits 781ac3b/b3b63f1f on branch p5-removal per the body.

    Enriched by the fleet monitor (intake pass): labels normalized and acceptance criteria appended to the body. This is triage only — no work has been started.

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

    • Agent: openchamber-scheduled-lane
    • Session / ID: queue task 2050
    • Task: Revalidate document removal and review the outstanding policy decisions.
  6. added
    queue/blockedQueue or user escalation state
    status/blockedQueue or user escalation state
    user/escalatedQueue or user escalation state
    and removed
    user/reviewNeeds a user-look: Muse reviews first and handles what it can
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 1, 2026
  7. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · escalated / blocked

    • Agent: openchamber-scheduled-lane
    • Session / ID: queue task 2050
    • Read: Author-only removal remains in pkgs/id/src/event_store/documents.rs:36-82; claims.rs:20-76 folds applied tags without a removal check. ChainExt has an optional group field (chain.rs:97-117), but document projection and removal authorization do not use it. Existing tests/content_removal.rs:232-354 covers non-author and ordering and uses a mock blob graph; the production blob reference index is not wired (blob_gate.rs:19-21,110-118). No tests run in this triage.
    • Owner decision needed: The P5.6 brief asks to refuse blobs and drop local bytes while decision 4 says keep content. Please choose retention/refusal policy, including shared hashes; define whether later/concurrent tags or new documents are affected and whether group Admin/Manage removal is deferred. The task-10 hiding flag concerns concurrent content and does not itself settle blob deletion. These choices affect data loss and replica convergence.
    • Status: Queue task blocked as escalated-to-user; no implementation was attempted.
  8. added
    mode/onlineFully doable remotely: design, config, code, cloud
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workkind/questionQuestion or design decision to resolvemeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedmode/onlineFully doable remotely: design, config, code, cloudpriority/normalOrdinary priority (the default)queue/blockedQueue or user escalation statequeue/queuedHas a queued task in the Supabase agent queuesource/humanFiled directly by a humanstatus/blockedQueue or user escalation stateuser/escalatedQueue or user escalation state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions