TalkCo application spec

04 · Channels & Content

DRAFT 16 sections

#Aims and reasoning

#Channels are the publishing primitive

TalkCo has two primitives: conversations (§05) and channels. A conversation is something a person says to someone; a channel is somewhere they publish. People should be able to publish durable, structured text, images, video, and files under their own identity without running infrastructure.

A person can maintain as many channels as their life has facets: friends, music, a project, professional updates, or unfinished thoughts. Publication should not force those facets into a single public persona.

#Nesting: channels within channels

A DIY channel can contain separate woodworking, garden, and repair projects. Nesting organizes work without requiring unrelated top-level streams. Sub-channels should inherit sensible defaults while allowing deliberate exceptions; the exact inheritance policy remains open.

#Following at the level you choose

Following is per-channel, rather than a single subscription to everything a person does. Someone may follow a parent, follow one child, or follow the parent while muting a noisy child. This supports the orthogonal contexts in §02. Following expresses interest; it must never silently grant access.

#Ephemeral and permanent registers

Ephemeral publication serves passing thoughts and work in progress. Permanent publication serves things meant to be found again. The first lowers some observation stakes; the second supports continuity. Neither should force people to manage storage infrastructure.

Ephemeral evidence and caveats

Small-moment sharing can reduce response pressure and impression-management concerns when paired with controlled audiences and private replies (Bayer2016, ChoiWilliamsKim2020, Kreling2022, Kim2024BeReal). Expiry cannot prevent screenshots or an authorized reader retaining a copy. Permanent publication still depends on funded custody and recoverable replicas; §11 owns availability policy.

#Visibility: public, unlisted, invite-only

VisibilityReader expectation
PublicAnyone given the reference may read; TalkCo supplies no global index.
UnlistedDiscovery depends on possession of a reference. Sharing that reference may share access.
Private / invite-onlyOnly explicitly authorized recipients receive access.

Unlisted is a discovery choice, not a promise that a link cannot be passed on. A channel's visibility and a follower's feed choices are separate decisions.

#Routing content with tags

Tags are a filing aid within an owner's channels and authorized network. They must not create global tag search, trends, or an additional discovery audience.

#Editing should not rewrite context

Permanent posts can be edited, with an edit marker and time. A reply or reaction to an earlier revision must retain that context through a revision reference or an appropriate history view. Full public edit history is not required by default.

#Cross-posting should not multiply reach

One post can be filed in several owned channels without appearing repeatedly to someone who follows them all. Cross-posting across profile spheres also reveals a relationship between those spheres; the author must choose that relationship deliberately. Independent publication remains available where separation matters more than shared identity.

#Protocol and architecture

#A channel is policy plus references, not a second copy of every post

Diagram 1. A channel is policy plus references, not a second copy of every post

Inheritance needs a defined rule for explicit overrides, parent changes, and concurrent edits. A child must not gain a broader audience merely because an old inherited grant arrives late. Audience widening needs an authorized transition and, where relevant, fresh publication consent. When the required policy state is missing or conflicting, the client defers new disclosure instead of choosing by arrival order.

SeamLikely candidate and statusTalkCo work that remains
Channel tree, references, revision viewsSQLite with rusqlite; provisional local baselineValidate events before projection; enforce scoped IDs and policy history.
Durable private posts and attachmentsAEAD objects with HPKE recipient envelopes; prototype directionBind object, revision, audience, policy state, and recipient device; manage rotation and consent.
Repeated private audienceOpenMLS; gated A1 alternativeBind group membership to TalkCo grants and decide historical access.
Collaborative draftsAutomerge or Yjs/Yrs; optional draft adapterProtect draft history and publish only an explicitly approved revision.
Event delivery and media transferp2panda-sync, iroh, and iroh-blobs; adapter candidatesConstrain topic/endpoint metadata, custody, quotas, and retries.

These are local uses of the candidate inventory, not an adopted dependency set. HPKE supplies recipient encryption; OpenMLS supplies group-security operations. Neither supplies channel meaning or publication consent.

#Variation — A0 object envelopes

Diagram 2. Variation — A0 object envelopes

This composition suits bounded or irregular audiences and independently retained posts. Envelope fanout and device changes are the main costs. The selected recipient-authenticated descriptor supplies source evidence separately from confidentiality; private publication does not acquire a transferable personal signature by default. Public objects need an explicit public distribution policy; unlisted bearer references must not be presented as identity-bound invitation grants. Restricted-to-public publication is an audience transition, not a change to a server flag.

#Variation — A1 recurring audience with MLS

Diagram 3. Variation — A1 recurring audience with MLS

An MLS application message can distribute an independent publication key to a recurring audience. This is a candidate composition, not a frozen wire format. Joining a group must not automatically reveal old publications, and leaving does not erase keys already received. The group-state, offline recovery, commit-conflict, and source-evidence behavior must meet the context requirements and justify the additional state over A0. The encryption research owns that comparison.

#Filing and deduplication stay within the chosen identity boundary

Diagram 4. Filing and deduplication stay within the chosen identity boundary

Deduplication uses an intentionally shared publication identity or a locally authorized equivalence, never a global plaintext hash. A ciphertext hash is a storage locator; reusing it across supposedly unlinked spheres can expose a relationship. Editing creates a new revision associated with the publication; responses retain the revision they addressed. Expiry removes eligible local views, keys, and custody obligations under the selected retention policy, without promising recall from other recipients.

#Open Threads

  1. Channel model pass. Resolve inherited defaults, child overrides, parent narrowing, muted descendants, and ephemeral-versus-permanent scope together; §12 owns sequencing.
  2. Audience-path gate. Measure A0 envelope fanout against A1 membership churn, recovery, and historical-access behavior before selecting a channel encryption path.
  3. Cross-context filing. Define the confirmation and identifier rules for intentionally linked cross-posts versus independent publication.
  4. Channel ownership (OT-04-005). Personal channels and community channels share content mechanics but use different authority records; §09 owns community grants.