Skip to content

id: implement chat ↔ talk-page unification extensions in pkgs/id (from design #5872) #6222

Open

Description

@dezren39

Summary

Implementation follow-on for the design decision recorded on #5872 (chat ↔ talk-page unification). Filed so the design has a linked implementation track, per programme practice. Do not start until both gates below clear.

Gates (both required before work starts)

  1. Timing decision — id: design: chat ↔ talk-page unification (from #5682) #5872's decision record restates the parent position: implementation timing is a separate decision, possibly months out. This issue waits for that decision.
  2. Sibling designs landed — the anchor part-selector grammar and drift/re-location rules are id: design: chat anchor data model (from #5682) #5870's decision; talk-page lifecycle/permissions are id: design: talk-page semantics (from #5682) #5871's decision. This implementation consumes those decisions; it does not invent them.

Scope (per the #5872 decision record)

In pkgs/id (v1 chat lives in src/chat.rs: chat.message.v1 signed events in a channel group):

  • Add chat.anchor.v1 events: bind/unbind/re-locate a conversation↔object anchor (link-type vocabulary from id: design: chat anchor data model (from #5682) #5870), part anchors by reference (object ID + part selector), never embedded content or capabilities.
  • Add the conversation-level talk_for binding: a conversation designated as an object's one canonical talk page; first valid binding wins, conflicts fold to a visible disputed state.
  • Extend ChatLink with a third kind, object (addressable ID object by ID + author), alongside v1's blob/event — this is the in-message anchoring and paste-a-link upgrade path.
  • Retroactive anchoring: additive events only, referencing v1 messages by event ID; client link-recognition may propose anchors, a signed anchor event from a member is what makes one real.
  • Projection changes must satisfy the eight invariants in the id: design: chat ↔ talk-page unification (from #5682) #5872 decision record (single log, additivity, no history mutation, deterministic fold, one canonical talk binding, no capability leakage, unknown-kind tolerance in older clients, orphan safety on object tombstone).

Acceptance

  • All eight id: design: chat ↔ talk-page unification (from #5682) #5872 invariants covered by tests (PBT where the fold/projection invariants allow: additivity and determinism are property-testable over generated event logs).
  • A v1-only conversation with no anchor events projects byte-identically to before this change.
  • Two replicas folding the same log with a conflicting talk_for binding converge on the same disputed state.

Relations: design #5872; parent #5682; protocol #2036; chat v1 #2051 (closed, implemented); epic #2056.

Acceptance criteria

  • The chat <-> talk-page unification extensions from the originating design are implemented in pkgs/id.
  • New behavior is covered by tests at the id layer (anchor/binding events and link objects).
  • Existing chat and talk-page behavior is unchanged for items that do not use the extensions.

Activity

  1. added
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. added
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Nov 5, 2026
  4. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Intake review

    • Related PRs (number search, this run): none found by number search this run
    • Still live: verified open this run; no merged PR found that explicitly resolves this issue, so it stays open.
    • Labels: normalized this pass (kind/enhancement, priority/normal, effort/l, status/needs-triage; meta/enriched added).
    • Notes: priority/normal: implementation follow-on to a completed design (lane record on the parent design issue).
    • Risks: Risk: unification semantics touching existing chat data - additive-only changes, per the design's invariants.
    • Suggested approach: Approach: implement additively in pkgs/id following the parent design's recorded invariants; gate on the design's named timing prerequisites.

    🤖 Agent note · filed

    • Agent: fleet monitor
    • Session / ID: repo-fleet-monitor run 2026-11-05T15:33:58Z
    • Found via: monitor reconciliation (Duty 2 intake enrichment)
    • Task: Intake pass per protocol §5: verified live, acceptance criteria appended, labels normalized, related PRs linked above.
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/lLarge: multi-day or open-ended; expect staged check-inskind/enhancementmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)status/needs-triageNot yet triaged; needs a first look

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions