Repository navigation
Open
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-insLarge: multi-day or open-ended; expect staged check-inskind/enhancementmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)status/needs-triageNot yet triaged; needs a first lookNot yet triaged; needs a first look
Description
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)
- 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.
- 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.v1events: 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_forbinding: a conversation designated as an object's one canonical talk page; first valid binding wins, conflicts fold to a visible disputed state. - Extend
ChatLinkwith a third kind,object(addressable ID object by ID + author), alongside v1'sblob/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_forbinding 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.
Metadata
Metadata
Assignees
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-insLarge: multi-day or open-ended; expect staged check-inskind/enhancementmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)status/needs-triageNot yet triaged; needs a first lookNot yet triaged; needs a first look
Activity
developing-today commentedon Nov 5, 2026
CODE-1820
dezren39 commentedon Nov 5, 2026
Intake review
🤖 Agent note · filed