Multi-User Collaboration and Social Interaction Design Guidelines
For designers and engineers: when two or more people work on the same thing, let each person know what the others are doing without being surveilled, keep one person's input from being silently swallowed by another's operation, and make sure "I undo" always undoes only the step I made.
6 principles · 40 rules · MUST 35 · SHOULD 5
Contents
For designers and engineers: when two or more people work on the same thing, let each person know what the others are doing without being surveilled, keep one person's input from being silently swallowed by another's operation, and make sure "I undo" always undoes only the step I made.
What multi-user collaboration products do is make one thing belong to several people at once: a document, a canvas, a task, a space. The moment this happens, all the questions a single-user product never has to answer show up at once — is someone else here right now, what are they looking at, what are they editing; who can see this thing right now, and who will be able to see it a second from now; when two people change the same spot at the same time, whose change counts; when I press undo, does it undo my own last step or someone else's; who is responsible for this right now, and who becomes responsible once that person leaves; and, in a place everyone can see, do I still have somewhere to try something out first. These guidelines take effect from the moment a second person appears on the same object.
The most common design mistake in this domain is treating it as a feature checklist for real-time collaborative editing: build multi-cursor, avatar bars, comment bubbles, and edit history one by one, and consider collaboration done. These are mechanisms, not promises. Where real harm actually happens is not on the mechanism checklist — it is when "who has viewed this document" becomes a default feature that no one can turn off, when someone changes the sharing scope from three people to anyone with the link while the three people already inside have no idea, when auto-merge stitches two people's changes into a result that took effect with the wrong meaning, when a new hire presses Ctrl+Z twice and rolls back ten minutes of a senior colleague's work, when the thirty tasks under a departed owner's name are neither transferred nor flagged an error — they just quietly go unwatched. None of these failures are missing features; they are missing rules about consequences.
These guidelines consist of six principles and 40 rules: principles state the design direction; rules specify the applicable situation, behavior requirements, and verification methods. Each rule belongs to exactly one principle, and the rule number is the principle number (C3-2 is the second rule under the third principle). The six principles are split by regulatory object: perceptual information about others during collaboration, the visible scope of content, the arbitration of concurrent edits, the effect and outcome of shared operations, the ownership and handoff of responsibility, and private state and participation choices.
Scope statementThese guidelines constrain the nature of the experiential promises a product makes to users about multi-user collaboration capability and the mechanisms that fulfill them; they do not presuppose a single technical architecture and do not specify a synchronization algorithm, data model, or permission model. They apply to documents, whiteboards, task boards, reviews, and discussions around a shared object, and do not require every product to provide every capability. Adopting these guidelines cannot substitute for the following dedicated assessments and compliance determinations: privacy and personal information protection (member activity records may involve processing of personal information and must be assessed against the target market and feature set), labor and employment monitoring compliance, enterprise information security and access-control technical audits, data retention and e-discovery requirements, and a complete accessibility conformance assessment; this document directly specifies accessibility requirements unique to the collaboration process. Three things explicitly out of scope for these guidelines: content moderation and recommendation ranking on open social platforms (this document only specifies participation, do-not-disturb, and help-seeking boundaries within a collaboration space); an organization's roles, reporting relationships, and performance-management system (these guidelines only govern how responsibility fields are expressed in the product, not how an organization divides labor); and the cryptographic implementation and key management of end-to-end encryption (this document requires that access control actually take effect; it does not specify a cryptographic scheme).
The main text starts with Chapter 0, the task and factual entry point, Chapter 1 the principles, Chapter 2 how to read and quick-reference the rules, Chapter 3 the rules in detail, and Chapter 4 terminology; the verification checklist and evidentiary notes are in Appendices A and B, combined scenarios and acceptance records are in Appendix C, the complete sources are in reference.md, and the configurable items are in Multi-User Collaboration and Social Interaction Design Token.
0. Starting from one collaboration task
First pick a real task, list the initiator, collaborators, arbiters, external members, and anyone who will be affected, then decide which capabilities are needed. A read-only share does not need to implement edit locks; an ordinary comment does not need to implement formal voting.
| Design step | Minimum output | Question it answers |
|---|---|---|
| Define the object and the outcome | Object, success condition, point of formal effect | What are we completing together, and what counts as done? |
| Map out actors and audience | Read/write/share/adjudicate/remove permission matrix | Who can do what, and who will see the result? |
| Choose the mode of collaboration | Real-time, asynchronous, turn-based editing, and a private exploration entry | Do we really need simultaneous editing? Who bears the waiting and the conflicts? |
| Write out behavior and failure | Concurrency, de-authorization, retry, handoff, and exit paths | What happens when the network drops, someone leaves, or someone changes their mind? |
| Configure and verify | Token valid values, mechanism evidence, both-sided interfaces | Can the parameters actually be delivered, and do users understand them? |
Status copy must have evidence. The following are operational facts, not configurable token values; "unknown" and "failed" are each presented as such, and a stale fact must not be used to paper over a missing one.
| Expression | Minimum evidence | What it does not prove |
|---|---|---|
| Present | Session subject, observation source, last-valid time, expiry point | That the person is actually looking, willing to respond, or has already agreed |
| Saved / Accepted | Object snapshot, operation ID, persistence location, acceptance receipt | That someone else has received or read it |
| De-authorized | Subject and resource scope, effective time, mechanism execution result | That a downloaded copy has been erased |
| Locked | Object, holder, valid lock credential, expiry point | That exclusivity persists after a network disconnect |
| Handed off | Current handoff request, receiving subject, acceptance evidence and effective result | That an expired request can still change current responsibility |
| Approved | Decision-maker, qualification, approval scope, object snapshot, invalidation condition | That subsequently added content is also approved |
For every "already ..." on the interface, record the object, evidence source, observation time, and validity boundary separately. When this evidence cannot be provided, use expressions proportionate to the facts, such as "verifying now," "saved on this device only," or "handoff pending."
1. Six principles
The six principles split design responsibility by regulatory object: each principle governs the obligations on one category of object, and each rule belongs to the single principle whose regulatory object is its obligation's direct target. Because the objects differ, the principles do not substitute for one another — this is both the basis of the split and how the split is tested.
| Principle | Regulatory object | Design direction | Governed rules |
|---|---|---|---|
| C1 Perceiving others has boundaries | The collaborative perceptual information the system presents to members and its reach (presence, location, changes, and comments) | Collaboration needs to know what others are doing, but perceptual information is itself a form of exposure. The granularity given should be just enough for collaboration, not enough to evaluate a person | C1-1 ~ C1-7 |
| C2 Visibility is a property of content | The visible scope and permissions a piece of shared content has for each subject, and changes to them | Who can see what is a property the content itself carries, not whether a button is hidden in the interface. When the scope changes, the people already inside have a right to know | C2-1 ~ C2-7 |
| C3 Concurrent edits do not swallow input | The arbitration of simultaneous edits to the same spot by multiple people | Two people changing the same thing at the same time is not an exceptional branch — it is the norm. No policy may let anyone's input silently vanish, and none may hand the adjudication to someone who should not be adjudicating | C3-1 ~ C3-6 |
| C4 A personal operation has an explicit scope of effect | The effect an individual's single operation produces on a shared object, the evidence of the outcome, and its attribution | Every key pressed in a shared space lands on someone else. Undo must mean "undo what I did," not "undo the last step"; the operator must know before pressing what will change and who will be affected | C4-1 ~ C4-7 |
| C5 Responsibility has an owner and can be handed off | The subject responsible for a task or piece of content, discussion conclusions, and effective decisions | Participating is not the same as being responsible. Who is responsible for this right now must have an answer; people leave, but responsibility must not disappear along with them | C5-1 ~ C5-6 |
| C6 There is private room within a shared space | Private state and participation choices within a shared workspace: drafts, unpublished opinions, personal views, not-yet-finalized attempts, and choices about participation and receiving reminders | If everything is instantly visible to everyone, people stop daring to do anything. "Trying something out" in a shared space must not take effect for everyone by default | C6-1 ~ C6-7 |
A single scenario can touch multiple principles at once — a member on a shared board changes a column's filter condition and, in passing, bulk-assigns three cards to the account of a colleague who just left, then presses undo: the product must simultaneously face whether this filter change is a personal or a shared view (C6-3), whether the bulk assignment stated its scope of effect and interruption consequences before execution (C4-4, C4-6), where responsibility goes when the assignee is no longer in the organization (C5-3), and whether this undo reverses only that person's three assignments or also swallows someone else's changes made in the interim (C4-1, C4-2). This is not a miscategorization: these rules constrain obligations on different regulatory objects — one is the default ownership of personal state, one is an operation's scope of effect, one is where responsibility goes, and one is the scope of an undo. Mutual exclusivity and exhaustiveness are claims this split accepts being tested against, not facts established by mere assertion: when a rule's addition, removal, or ownership is in doubt, verify it against the classification check in Appendix A. If the check fails, what gets changed is the principle's split.
The two boundaries in this split that most need ongoing scrutiny are stated here explicitly: C1 and C2 — C1 governs "who gets to see information about a person," C2 governs "the visible scope of content." "Who has viewed this document" touches both sides; it is assigned by the fact that its direct regulatory object is a piece of information about a person — a person's reading act — so it belongs to C1; whereas "who this document is currently visible to" has content's visible scope as its direct regulatory object, so it belongs to C2. C4 and C6 — C4 governs "what effect my operation produced on others," C6 governs "when my state starts being visible to others." The same "I changed it but haven't decided yet": if the question is whether this change has already taken effect and spilled over into someone else's work, it belongs to C4; if the question is that the product simply provides no path to try something without affecting others, forcing people to change shared state directly, it belongs to C6. If these two spots keep producing ownership disputes in practice, the principles should be adjusted rather than adding an intermediate layer.
Principles are for understanding the rules and their ownership; they are not themselves a separate judgment item. When a principle conflicts with the reading of a specific clause, the applicable clause governs, and the ambiguity needing clarification is recorded.
A rule's ownership being singular does not mean a mechanism cannot be reused. A single "change log" can be the basis for operation attribution (C4-3), evidence for conflict adjudication (C3-4), and a safeguard that history is not rewritten after a responsibility handoff (C5-4); a single "subject resolution" mechanism can determine whether visible scope can be ascertained (C2-1), who presence information is shown to (C1-4), and who content belongs to after someone leaves (C5-3). One mechanism serving multiple purposes is the norm; which rule it is written under depends on the direct regulatory object of the obligation.
2. How to read the rules
2.1 The structure of each rule
| Part | Function |
|---|---|
| In one sentence | A memorable version of the rule; does not substitute for the main text |
| Applies to | The situation in which this rule takes effect. A product outside the applicable scope can simply record "not applicable" and need not force a fit |
| Rule | The normative text, stating this rule's requirement |
| Boundary conditions | Together with Applies to, bounds the scope of the requirement: states what this rule does not require and under what conditions an exception holds (only some rules have this) |
| Design application / Verification examples / Counterexamples | Explanatory material that helps implementation; adds no separate obligation and specifies no single implementation |
| Basis and references | Failure records and implementation references (only some rules have this; the evidence types and sources are in Appendix B and reference.md) |
One sentence for the force of each part: the rule text states the requirement; Applies to and Boundary conditions together bound the requirement's scope of application; Design application, Verification examples, Counterexamples, and Basis and references add no separate obligation.
A rule states the nature of the behavior, not the implementation: after two people edit the same paragraph at the same time, both people's input still being there and each still being able to recognize which part is their own — that is product behavior; implementing it with operational transformation, conflict-free replicated data types, pessimistic locking, or a three-way merge is an engineering solution — the two must line up, but they are not the same deliverable. These guidelines therefore do not specify a synchronization protocol, data structure, or consistency model.
2.2 Normative terms
The rule text uses a three-tier system of normative terms:
- MUST: non-compliant if not satisfied. Without it, some promise made to the user would fail in a foreseeable situation — this is the sole basis for marking something MUST.
- MUST NOT: the negative counterpart at the same strength as MUST, naming behavior that must not occur; "must not" and "forbidden" in the main text are equivalent.
- SHOULD: followed by default; when there is real reason to deviate, record the reason and the alternative, and accept the same verification. Deviation needs no approval, but it needs to be recorded. "Should not" is the negative counterpart of "should."
Compliance is judged clause by clause, taking each independent obligation clause in the main text as the unit: a declarative sentence with no normative term carries the strength of the rule heading it sits under; a clause with an explicit normative term is judged at its own strength — a MUST NOT clause inside a SHOULD rule remains a hard constraint (C2-6, C3-6, C4-6, C5-5, and C6-5 contain such clauses), and strength annotations on rule headings or the quick-reference table do not replace clause-level binding force. "Cannot" in the main text is used only for statements of capability or fact, never to express an obligation.
Strength indicates binding force, not importance.
2.3 The two sides of a counterexample
Counterexamples come in two sides: "under-delivery" is missing this requirement; "over-delivery" is turning collaboration into an approval workflow in order to satisfy it. Multi-user collaboration gets built badly densely at both ends: at one end, every move everyone makes is broadcast to everyone in real time, turning the workspace into a surveillance room; at the other end, every change gets a review gate to protect everyone, so two people changing one sentence requires three rounds of notification. Letting people work together and keeping people from harming one another are two faces of the same thing; attending to only one face is not doing it right either way.
One place that is especially easy to over-deliver deserves a special note: more conflict prompts is not better. Treating any two people who touched the same file one after another as a conflict, and popping up a merge screen a dozen times a day, has the same effect as silently discarding input — either way, people stop looking at the prompts.
2.4 Rule quick reference: 40 rules
The table below is the one-sentence memorable version of every rule; click a rule's name to jump to its full text in Chapter 3. The quick reference does not substitute for each rule's applicability conditions and complete requirements; a few SHOULD rules contain a forbidding-level clause (C2-6, C3-6, C4-6, C5-5, C6-5) — the main text governs the determination (see 2.2).
C1 Perceiving others has boundaries
| Rule | Strength | In one sentence |
|---|---|---|
| C1-1 Presence status comes from a current determination | MUST | If the avatar is lit, it should really mean present; if unsure, say unsure. |
| C1-2 An account being present does not mean the person is present | MUST | The person behind that avatar might not be who you think. |
| C1-3 Perceptual granularity is only enough for collaboration | MUST | Enough for me to know which part someone is editing — not how many keystrokes they made. |
| C1-4 The perceived party can know and control it | MUST | I should know who is watching my whereabouts, and be able to switch it off. |
| C1-5 "Who has viewed" and "who is online" are decided separately | MUST | Being online is exposure in the moment; having viewed is retrospective exposure — one switch must not bundle them. |
| C1-6 Perceptual information is not used for evaluation | MUST | Online duration, reading records, and edit counts must not be used to score people. |
| C1-7 Collaboration changes can be perceived equally | MUST | Without seeing colors or using a mouse, one can still follow changes and complete the collaboration. |
C2 Visibility is a property of content
| Rule | Strength | In one sentence |
|---|---|---|
| C2-1 Visible scope resolves to subjects | MUST | "Shared" is not the answer — "who" is. |
| C2-2 Scope changes are told to those already inside | MUST | If more people have entered the room, or the door has been opened, those already inside have a right to know. |
| C2-3 The reach of a shared link is explicit | MUST | A link can be forwarded — the audience can grow without limit and cannot be recalled. |
| C2-4 Permission takes effect at the mechanism level | MUST | A hidden button is not permission; being unable to retrieve it is. |
| C2-5 Inheritance and exceptions are traceable | MUST | Why he can see this one must be answerable. |
| C2-6 A normal path is given for unauthorized access | SHOULD | Let people know who to ask, instead of hitting a blank wall. |
| C2-7 De-authorization covers actions in flight and derived content | MUST | After the door closes, old pages and pending messages must not still get through. |
C3 Concurrent edits do not swallow input
| Rule | Strength | In one sentence |
|---|---|---|
| C3-1 The concurrency strategy is declared in advance and consistent with behavior | MUST | What happens when two people edit at once is a design decision, not luck. |
| C3-2 The part currently being edited is visible in advance | MUST | Don't wait until I've finished writing to tell me someone else is already on this part. |
| C3-3 Auto-merge has boundaries and its result is identifiable | MUST | Merging without conflict is not the same as merging correctly. |
| C3-4 Conflicts go to someone who can adjudicate | MUST | A conflict should not be decided alone by whoever unluckily submits last. |
| C3-5 An exclusive lock has a holder and a time limit | MUST | If the person who locked it has gone home, the file must not stay locked forever. |
| C3-6 The promise of convergence is stated separately from what others can see | SHOULD | "What I see is the latest" and "what I changed, others can see" are two different things. |
C4 A personal operation has an explicit scope of effect
| Rule | Strength | In one sentence |
|---|---|---|
| C4-1 Undo undoes one's own step | MUST | Undo means "undo what I did," not "undo the last step." |
| C4-2 Undo does not silently roll back someone else's work | MUST | To roll back someone else's changes along with mine, say so clearly first, then roll back. |
| C4-3 Every change has a resolvable author | MUST | Who wrote this line — a person or an Agent — must be traceable. |
| C4-4 The scope of effect is explicit before execution | MUST | Know before pressing whether this changes just mine or changes everyone's. |
| C4-5 Destructive operations on shared objects are held to a stricter standard | MUST | Deleting your own thing and deleting everyone's thing are not the same act. |
| C4-6 Bulk operations do not produce a proportional amount of interruption | SHOULD | Changing a hundred items is not the same as sending a hundred notifications. |
| C4-7 Retries and partial success each have their own distinct result | MUST | Not receiving a receipt does not mean it wasn't done; if only part succeeded, say which part. |
C5 Responsibility has an owner and can be handed off
| Rule | Strength | In one sentence |
|---|---|---|
| C5-1 The current responsible subject is resolvable | MUST | The list of participants does not answer "who is responsible right now." |
| C5-2 A handoff is a two-sided event | MUST | Assigning it out does not mean it has been taken up. |
| C5-3 Leaving and transfer are symmetric | MUST | When a person leaves, the things under their name must not just go unreachable in place. |
| C5-4 A change in responsibility does not rewrite historical attribution | MUST | After the owner changes, who wrote something before is still who wrote it. |
| C5-5 The boundaries for external and temporary members are explicit | SHOULD | When a guest's access expires, and who owns what they left behind after it expires. |
| C5-6 Discussion, resolution, and decision are each recorded separately | MUST | Ending a discussion does not mean everyone agreed; an approval covers only the content as it stood at that time. |
C6 There is private room within a shared space
| Rule | Strength | In one sentence |
|---|---|---|
| C6-1 Unfinished work is not sent out by default | MUST | Something not yet finished should not already be visible to others. |
| C6-2 Exploratory operations have a path that does not affect others | MUST | Wanting to try something should not require alerting everyone first. |
| C6-3 A personal view does not change what others see | MUST | If I collapse a column, that should not collapse everyone else's screen too. |
| C6-4 The move between private and shared areas is explicit and cannot pretend to be recalled | MUST | Recalling can delete the content, but it cannot delete "having already been seen." |
| C6-5 Private communication is not folded into the shared record | SHOULD | A private chat does not become public material just because it was exported, indexed, or summarized. |
| C6-6 Reminders can be scoped down, and being mentioned does not expand access | MUST | One can receive fewer interruptions; being mentioned does not mean being granted access. |
| C6-7 Participation restrictions have a scope and an exit path | MUST | Blocking, leaving, and de-authorization each have consequences, and a restriction must also have a way to be lifted. |
3. Rules in detail
This chapter expands all 40 rules across the six principles. Each rule's structure and the binding force of each part are given in 2.1; the design applications, verification examples, and counterexamples within them are only explanatory material that helps implementation — they specify no single component and require no separate deliverable document.
3.1 C1 Perceiving others has boundaries
Collaboration needs to know what others are doing: knowing a colleague is already editing section three, I don't go edit section three; knowing no one has looked at the proposal, I send another nudge. This kind of information is a source of collaboration efficiency, and it is also the earliest place in this domain to be over-delivered — the same piece of information is collaboration at a coarser grain and surveillance at a finer one. This principle governs how information about other people is generated, at what granularity, to whom, and whether the person being perceived has any room to speak up. It does not govern the visible scope of the content itself — that is C2.
C1-1Presence status comes from a current determinationMUST
In one sentence: If the avatar is lit, it should really mean present; if unsure, say unsure.
Applies toproducts that present to a user whether other members are online, on the current object, or immediately reachable.
RuleThe presence status of others presented to a user MUST come from a currently valid determination (at least one of: connection, recent interaction, explicit setting), with the validity period of that determination stated. A valid heartbeat is evidence that belongs to the current connection generation, is sequentially valid, and has not been judged expired; a delayed-arrival buffered packet MUST NOT re-extend an old session's online claim after reconnection. The moment of receipt is used only for local timing on this end; it does not substitute for checking the source's identity and timeliness. Once a determination has expired, it MUST be presented as status unknown or offline — presenting the last-active time directly as current presence is forbidden (see collab.presence.freshness.ttl). A user's explicitly set presence status (busy, do not disturb, invisible) takes precedence over system-detected results; the system is forbidden to override or "correct" a user's explicit setting with a detection result. When presence status is unavailable, it MUST be presented as unknown, and MUST NOT be filled in with a default of online.
Boundary conditionsThis rule does not require real-time detection, nor does it forbid making detection user-triggered refresh; it constrains the consistency between what is presented and the actual determination. Viewing an avatar does not itself renew the period; current presence also does not prove that the specific person is currently paying attention.
Design applicationDesign "offline," "status unknown," and "last active at some time" as three distinguishable presentations, rather than drawing the latter two as the same gray dot. Give "currently on this object" and "in the product but not on this object" separate expressions, since the former's validity period is usually far shorter than the latter's.
Verification examples
- User side: have one member close the client or disconnect, and observe how long it takes for other members to see the status change, and whether they act on it by initiating contact that is now guaranteed to go unanswered.
- Implementation side: check the signal sources and validity-period configuration of the presence determination; verify that an expired status is not served from cache, and that a user's explicit setting is not overridden by a detection result.
CounterexamplesUnder-delivery — a colleague turned off their computer three hours ago, but their avatar's green dot is still lit in the collaborator list, and someone @s them in the document waiting for a reply; over-delivery — to be precise about status, a heartbeat is broadcast to all members every two seconds, turning presence into an activity livestream.
C1-2An account being present does not mean the person is presentMUST
In one sentence: The person behind that avatar might not be who you think.
Applies toproducts that use presence status as a basis for contact, assignment, approval, or permission decisions.
RuleThe system is forbidden to assert an account's presence status to other members as evidence that the person is present. Presence produced by shared devices, shared accounts, meeting-room terminals, proxy logins, and automated sessions MUST be distinguishable from personal presence (see collab.presence.identity.mode). An operation requiring the person's own confirmation is forbidden from using presence status alone as evidence of having been made known; activity produced by an Agent or automation acting on someone's behalf MUST be presented in a way that is identifiable as not the person's own operation.
Boundary conditionsThis rule does not require the product to implement identity verification, nor does it forbid using presence as a "worth trying" contact hint; what it forbids is treating presence as "this person already knows" or "this person has agreed."
Design applicationPresent a session on a shared terminal as a device rather than as a person; exclude a long-lived connection maintained by automation from personal presence determination — otherwise a server that never sleeps makes one person permanently online.
Verification examples
- User side: log in with someone's account on a shared meeting-room terminal, and observe whether other members see "someone is online" or "a device is online."
- Implementation side: check the source classification of presence signals; verify that automated sessions do not count toward personal presence.
CounterexamplesUnder-delivery — a colleague's account stays logged in on a shared office display, and the board shows them online all day, so every task gets assigned to them; over-delivery — to make sure it's really the person, every viewing of the collaborator list requires all members to re-verify their identity.
C1-3Perceptual granularity is only enough for collaborationMUST
In one sentence: Enough for me to know which part someone is editing — not how many keystrokes they made.
Applies toproducts that present other members' activity information to members.
RuleEvery category of perceptual information MUST be bound to the collaboration problem it is meant to solve, and its granularity MUST NOT exceed what solving that problem requires (see collab.presence.awareness.granularity). Presenting process data such as individual keystrokes, dwell duration, cursor idle time, window-switching behavior, or operation counts per unit time as routine perceptual information toward other members is forbidden. Scenarios that need finer granularity (such as synchronized presentations, paired operation, or incident troubleshooting) MUST be a one-off or time-bounded state explicitly enabled by the perceived party; it MUST NOT be the default. The presentation scope of perceptual information MUST match the parties relevant to that collaboration problem, and MUST NOT be broadcast to members unrelated to the object.
Boundary conditionsThis rule does not forbid presenting information localized to an object and a block, such as "someone is editing this paragraph" or "someone is in this document" — that is exactly the granularity collaboration needs. It also does not constrain data the perceived party sees about themself. Audit and security logs are handled under their own compliance requirements and are not the member-facing perceptual information this rule addresses, but their access is equally subject to the purpose constraint in C1-6.
Design applicationWrite out first "what specific trouble this piece of perceptual information saves someone else," and delete whatever you cannot write out. The same signal can have two granularities: show collaborators "currently on section three," show the person themself "you have been on this for forty minutes" — the latter is not sent out.
Verification examples
- User side: list every piece of activity information in the product that other members can see, and ask of each one, "what concrete problem would collaboration have without it."
- Implementation side: check whether the member-facing perceptual field list is mixed together with the internal instrumentation list; check for undeclared fine-grained activity being consumed by the front end.
CounterexamplesUnder-delivery — the collaboration sidebar shows in real time "Zhang San has been idle for 12 minutes" and "Li Si made 47 edits today"; over-delivery — to avoid any suspicion of surveillance, even "someone is editing this paragraph" is not shown, so two people keep overwriting each other's edits.
C1-4The perceived party can know and control itMUST
In one sentence: I should know who is watching my whereabouts, and be able to switch it off.
Applies toproducts that generate and present member activity information to others.
RuleEvery member MUST be able to find out which of their activity information is being presented to whom (see collab.presence.subject.view). The product MUST provide a tier that reduces one's own visibility (at least one tier that presents no real-time presence or location to other members), and adopting that tier is forbidden from causing core collaboration features to become unavailable or from producing a functional penalty (see collab.presence.visibility.self). When a member's activity information is presented to a subject not previously in scope (a new member joins, the scope expands, an export to an external party), the notification requirement of C2-2 MUST be followed.
Boundary conditionsNot presenting real-time presence and location does not mean anonymous collaboration: a member can still see the author of a shared contribution, the holder of a valid lock, and the current responsible party. An organizational policy may mandate controlled auditing, but it cannot cancel the real-time-perception reduction tier required by the main text, or mark using that tier as anomalous. This rule does not exempt the compliance obligation of the record itself: records needed for security auditing are not exempt from retention because a member reduced their visibility — they are simply not presented to other members.
Design applicationMake "who I can see" and "who can see me" two separately viewable lists — most products only build the former. The wording of the reduction tier should state the tradeoff ("others will not be able to see whether you are online, nor know that you are viewing this document"), so the choice is made with full knowledge.
Verification examples
- User side: have a member try to answer "who at the company can see which document I'm currently reading," and record how many steps it takes and whether a definite answer can be obtained.
- Implementation side: after enabling the reduction tier, check whether every interface facing other people indeed stops returning that member's real-time location and presence.
CounterexamplesUnder-delivery — reading records are visible by default to everyone with access, and the product has no entry point explaining this fact or a way to turn it off; over-delivery — visibility is made into a pop-up that must be chosen every time a document is opened, with a confirmation required after choosing.
C1-5"Who has viewed" and "who is online" are decided separatelyMUST
In one sentence: Being online is exposure in the moment; having viewed is retrospective exposure — one switch must not bundle them.
Applies toproducts that provide both real-time presence information and reading, viewing, or read-receipt records.
RuleReal-time presence information and retrospective viewing records MUST be managed as two separate categories of information: their on/off state, visible audience, and retention period MUST be independently decidable (see collab.presence.seen.mode, collab.record.retention.ttl). Using a single switch to decide both at once is forbidden, and reconstructing an equivalent conclusion from the other category when one is turned off is also forbidden (such as piecing together an equivalent read list from presence time and document open counts after read receipts are disabled). The retention period of viewing records MUST be explicit and queryable; once expired, they MUST NOT continue to be presented to other members. The mere existence of viewing records MUST be knowable before a member could first be recorded, not exist only in the terms of service.
Boundary conditionsThis rule does not forbid offering read receipts or viewing records — they do have value in many collaboration scenarios. What it requires is that these two kinds of exposure be decided separately. Statutory or contractually required proof of delivery (such as sign-off on a formal notice) is not subject to this rule's "can be turned off" requirement, but it must still comply with the knowability and retention-period requirements.
Design applicationWrite the difference between the two into the wording of the setting item itself — "others can see whether you are currently online" and "others can see when you viewed which content" are two different sentences; writing them together is the same as not writing them at all. The default audience for read records should usually be limited to the content's responsible party, not everyone with access.
Verification examples
- User side: after turning off viewing records, check whether other members can still infer equivalent information through side channels such as presence history, notification read status, or comment browsing position.
- Implementation side: check whether the switches, audience, and retention period of the two categories are independently configured; verify that expired records are no longer returned externally.
CounterexamplesUnder-delivery — a single "collaboration visibility" switch controls both online status and reading records, and turning it off also removes one's own online status, so nobody dares turn it off; over-delivery — every time a shared document is opened, a prompt first asks "allow this viewing to be recorded?"
C1-6Perceptual information is not used for evaluationMUST
In one sentence: Online duration, reading records, and edit counts must not be used to score people.
Applies toproducts that collect member presence, viewing, or operation information.
RuleInformation generated for collaborative perceptual purposes is forbidden to be used for a member's performance evaluation, competency scoring, task-assignment priority, ranking weight, admission determination, or differential pricing (see collab.presence.purpose.scope). Every category of perceptual information MUST be bound to an explicit purpose and downstream consumer, and modules not on that list MUST NOT read it; presenting it in the form of an aggregate, a ranking, or "team activity level" that produces an equivalent effect on an individual is forbidden. A scenario that uses collaborative activity data for a management purpose (such as work-hour statistics) MUST be supported by that scenario's own compliance basis and disclosed to those from whom data is collected; it MUST NOT be enabled by default merely because this product has a collaboration feature.
Boundary conditionsThis rule does not forbid self-facing statistics shown to the member themself, nor does it forbid capacity and performance metrics that do not point at an individual. It constrains turning perceptual information into a judgment about a person. An organization's log access for security or auditing purposes is handled under its own policy and is not the evaluative use this rule addresses, but that access must still have a basis and be recorded.
Design applicationWrite the downstream consumers of perceptual fields as an explicit list and check it regularly — this kind of overreach is usually not intentional design, it's some reporting module reading straight from the collaboration store. Set a hard constraint for "team dashboard" style features: they can show an object's progress, not a ranking of people's activity.
Verification examples
- User side: check whether the product contains any leaderboard of members ranked by activity level, edit count, or response speed.
- Implementation side: audit whether the list of downstream readers of presence and viewing records matches the declaration; check for any side-channel export to HR or performance systems.
CounterexamplesUnder-delivery — the collaboration platform gives managers a weekly report of "member online time and document edit count" and ranks by it; over-delivery — to avoid being used for evaluation, even object-level information like "this document has not been viewed by anyone in the last thirty days" is withheld, so stale content cannot be identified.
C1-7Collaboration changes can be perceived equallyMUST
In one sentence: Without seeing colors or using a mouse, one can still follow changes and complete the collaboration.
Applies toproducts that present presence, changes, comments, conflicts, or permission changes.
Rule
- The system MUST provide a means of identification that does not depend on color, avatars, or transient animation; a name or accessible name, the object's location, the type of change, and the actionable entry point MUST be obtainable by assistive technology, and MUST NOT exceed the scope the member is currently authorized to view.
- Comments, diffs, conflicts, and the handling entry point MUST be locatable and operable by keyboard; when related content is moved or deleted, the change of location MUST be announced, and focus MUST NOT be moved to unrelated content.
- Remote edits MUST NOT snatch away the person's own input focus without notice. The product MUST provide a way to control announcements of non-critical activity, and MUST retain an entry point for actively querying changes; pausing announcements does not pause synchronization, nor does it turn off input protection.
- When a follow-someone's-viewpoint feature is provided, it MUST be entered actively by the follower, the following state MUST be presented continuously, and exiting MUST be allowed at any time; the initiator cannot consent to being followed on someone else's behalf.
Related configuration: collab.presence.presentation.
Boundary conditionsThis rule requires that information and operations be reachable; it does not require every cursor movement to be announced, nor does it require a follow feature to be provided.
Verification examplesUsing a screen reader and keyboard, complete "locate a comment — read the content it refers to — reply — return to the original editing point"; when content is concurrently inserted, check that focus, selection, and input are preserved; after pausing activity announcements, critical conflicts can still be looked up.
CounterexamplesUnder-delivery — members are distinguished only by red/green cursors, and comments can only be viewed by hovering with a mouse. Over-delivery — every remote keystroke is read aloud one by one, so the user cannot finish their own sentence.
3.2 C2 Visibility is a property of content
Who can see what is a property the content itself carries: it travels with the content, travels with a copy when the content is copied, travels with the embedding relationship when the content is embedded, and determines whether export is possible. It is not a switch on the interface — hiding a menu item, graying out a button, or filtering it out of search results are none of them visibility; they are only its presentation. This principle governs how the scope of visibility itself is defined, how it can be ascertained, who has a right to know when it changes, and whether "cannot be seen" actually holds at the mechanism level. It does not govern perceptual information about people — that is C1.
C2-1Visible scope resolves to subjectsMUST
In one sentence: "Shared" is not the answer — "who" is.
Applies toproducts that provide content-sharing capability.
RuleAt any moment, the visible scope of any shared object MUST be resolvable, by a member authorized to view that scope, to specific subject categories: named individuals, an enumerable group, link holders, external guests, the entire organization (see collab.visibility.audience). Using only "shared," "public," or "team visible" as the complete statement of visible scope is forbidden without also providing its resolved result. When a group is the subject, its current members MUST be expandable, or at least its size and source MUST be knowable; a non-enumerable audience (such as link holders) MUST be explicitly labeled as non-enumerable (see C2-3). Visible scope and edit permission are two dimensions and MUST be expressed separately; a single level is forbidden from representing both at once.
Boundary conditionsThis rule does not require disclosing the complete visitor list to all members — the scope of who can view may itself be sensitive information; what it requires is that an authorized party gets a definite answer, and that an unauthorized party gets an explicit "you are not authorized to view this information" rather than a list that looks complete but has actually been filtered. "Visible to everyone" in a large organization does not require enumerating each person.
Design applicationChange the default answer of the sharing panel from a status word to a list of subjects. For nested structures (files within a folder, sub-pages within a page), be able to answer the actual scope of "this one," not just report the parent level's setting.
Verification examples
- User side: take ten shared objects at random and have the owner state each one's exact visible scope within thirty seconds; record the proportion unable to answer and the reasons why.
- Implementation side: check whether the scope presented on the interface matches the backend's actual authorization list, especially after group nesting and inheritance stack up.
CounterexamplesUnder-delivery — the sharing panel shows only "sharing enabled" and a copy-link button, with no way to find out who can open this document; over-delivery — every single access is turned into a request that the owner must approve individually, jamming up the team's routine collaboration.
C2-2Scope changes are told to those already insideMUST
In one sentence: If more people have entered the room, or the door has been opened, those already inside have a right to know.
Applies toproducts that allow the visible scope of content to be changed after creation.
RuleWhen the visible scope of a shared object expands, members already within that scope MUST be able to learn of this change (see collab.visibility.change.notice). Expansion includes: adding a named subject, adding a new group, converting from named sharing to link-visible, converting from internal to external, or being copied or embedded into an object with a larger scope. The notification MUST state the scope after the change, not merely "permissions have been updated"; the change record and the notification task MUST be generated no later than when the new subject gains access; online contributors MUST be shown the new-audience notice before they continue to submit, and offline members MUST check it before resuming submission. When visible scope shrinks, the removed subject MUST learn that their access has ended, or the product MUST ensure its interface no longer presents that object as accessible — an online interface is forbidden from continuing to display a submittable state; an offline interface MUST state that permission could not be verified, and reconnection MUST NOT allow submission on cached permission. A scope change MUST record the subject who made the change and the time, and MUST be queryable within the retention period (see collab.record.categories).
Boundary conditionsThis rule does not require an interruption on every single occurrence in real time: the notification task and the change record are generated at the moment permission takes effect, and their presentation may be aggregated or deferred until the member next enters that object — a member who is online and actively contributing should see it before continuing to input, and an offline member should see the new scope on next entry before continuing to contribute; when a product chooses deferred notification, that policy MUST be recorded. It does not require notifying every historical visitor to the content, only members still within scope at the time of the change. Emergency de-authorization in security-incident response may execute first and notify afterward, but the after-the-fact notification cannot be omitted. What this rule requires is a verifiable receipt of interface delivery or blocked new submission — it does not promise proof that anyone has psychologically become aware (see the evidence tiers in C5-2).
Design applicationSeparate "scope has expanded" from "permission has been adjusted" in the notification — the former changes who can see it, the latter may only be turning someone from can-comment to can-edit. Design a dedicated prompt for the step of "converting to link-visible," since it is the least reversible kind of scope change (see C2-3).
Verification examples
- User side: turn on link sharing on a document shared with three people and observe whether, when, and in what form the original three learn of it.
- Implementation side: check whether every category of expansion action triggers a notification; verify that the notification content includes the post-change scope rather than only "settings have changed."
CounterexamplesUnder-delivery — the document owner changes an internal document to "anyone with the link can edit," and the other collaborators have no idea and keep writing internal information into it; over-delivery — every time a new collaborator is added, an instant notification is pushed to all existing members, so a document with ten collaborators gets dozens a day.
C2-3The reach of a shared link is explicitMUST
In one sentence: A link can be forwarded — the audience can grow without limit and cannot be recalled.
Applies toproducts that provide sharing by way of a link as the access credential.
RuleWhen creating a share that uses a link as the credential, the product MUST state, at the point where the creation action occurs, that its audience is non-enumerable and forwardable, not merely state the current permission level (see collab.visibility.link.mode). Link sharing MUST provide a means of revocation, and MUST state the validity period and any additional access restrictions; restricting to a domain or requiring login cannot substitute for revocation. After revocation, already-established sessions and directly obtained resource addresses previously acquired MUST NOT continue to receive new server-side access (see C2-4, C2-7). A copy already downloaded to a device is not thereby remotely erased. The product is forbidden from setting link sharing as the default visible scope for newly created objects. The knowability of access records for a subject who has previously accessed via a link is handled per C1-5 and C2-1; implying the audience is controllable with wording such as "the link is private" is forbidden.
Boundary conditionsThis rule does not deny the value of link sharing — it is often the only viable way to collaborate with an external party. What it constrains is that the consequences of this choice are stated truthfully. For content that has already left the product's boundary (a copy someone else saved separately, a screenshot, an exported file), revoking the link does not constitute control over these copies; this limitation MUST be stated at the point of revocation, and users must not be left to assume revocation means recall.
Design applicationPut the sentence "anyone who knows the link" next to the toggle, not in a help document; give link sharing a non-permanent default validity period, so that inaction results in tightening rather than loosening.
Verification examples
- User side: after enabling link sharing, have the user answer "how many people can open it right now," and record how many give a specific number (which indicates the explanatory copy did not work).
- Implementation side: after revoking a link, retry access using a previously obtained direct resource address and an already-established session, and verify that access is in fact denied.
CounterexamplesUnder-delivery — one-click "copy link" defaults to generating an editable link accessible outside the organization, and the interface only says "link copied"; over-delivery — every access via a link requires the visitor to fill out an identity-and-purpose form, making external collaboration effectively unusable.
C2-4Permission takes effect at the mechanism levelMUST
In one sentence: A hidden button is not permission; being unable to retrieve it is.
Applies toproducts that present different content or different operating capability to different subjects.
RuleVisibility and operation permission MUST be enforced at the data and interface layer; hiding, graying out, or filtering on the interface is presentation only, and is forbidden as the sole means of enforcement. An unauthorized subject is forbidden from obtaining restricted content or fragments of it through interfaces, exports, search indexes, thumbnails, previews, notification digests, reference cards, or error messages. A partially visible object MUST make its partiality explicit: when what a person sees is a filtered list, a truncated history, or a view with some items hidden, this fact MUST be knowable (see collab.visibility.partial.disclosure); otherwise they will mistake the incomplete for the complete and decide accordingly.
Boundary conditionsThis rule does not require keeping the existence of an object itself secret — whether to hide an object's existence is a product decision, see the two values under C2-6. It does not require an independent authorization service for every content type, only that the actual retrieval paths are all bound by the same determination. When existence is sensitive, use the stable statement "showing only the scope you are authorized to access," without exposing the count or existence of hidden items.
Design applicationTreat "there are 3 more comments here you are not authorized to view" as a normal presentation rather than quietly erasing them — erasing them makes people mistakenly believe the discussion has ended. Build a dedicated over-privilege test case for the two most common leakage points: search and notifications.
Verification examples
- User side: as an unauthorized member, check whether fragments of restricted content appear in search results, notification digests, reference previews, or exported files.
- Implementation side: bypass the front end and call the list, detail, export, and index interfaces directly, and verify that the returned results are consistent with the permission determination.
CounterexamplesUnder-delivery — the comment section hides three discussions from an unauthorized member, but the notification digest pushes out the first two lines of one of them verbatim; over-delivery — for absolute isolation, even "this content exists but you are not authorized to access it" is not returned, and the user's link never opens and they never learn why (see C2-6).
C2-5Inheritance and exceptions are traceableMUST
In one sentence: Why he can see this one must be answerable.
Applies toproducts where visible scope involves hierarchical inheritance, group authorization, or rule derivation.
RuleWhen a subject's visibility into an object derives from inheritance, group membership, or rule derivation, that source MUST be ascertainable (see collab.visibility.inheritance.trace): which level it was inherited from, through which group, and loosened or tightened by which exception. Presenting only the final result with no way to trace its cause is forbidden. An exception set individually at one level MUST remain discoverable when the parent level changes, and MUST NOT silently expire or silently expand. The rule for how tightening and loosening stack MUST be explicitly defined and consistent with actual behavior (at least one of: most restrictive wins, most permissive wins, or level priority), and the product MUST NOT use different stacking results at different entry points.
Boundary conditionsThis rule does not require showing the complete authorization topology to every member; the right to ascertain it matches the permission of the viewing scope itself. It does not prescribe which stacking rule to adopt, only that the choice be written down and applied consistently.
Design applicationAdd a source line for each subject in the permission panel ("inherited from the parent folder via 'Product Team'") — this one line often prevents misconfiguration more than the entire permission model does. When moving an object to a new parent, present the resulting change in inheritance before the move.
Verification examples
- User side: for an object with a deep inheritance chain, have an administrator explain a member's source of access, and record whether it requires piecing information together across multiple interfaces.
- Implementation side: after modifying parent-level permissions, check whether child-level exceptions take effect according to the declared stacking rule; check whether the determination is consistent across different entry points (interface, API, export).
CounterexamplesUnder-delivery — someone can edit a financial document, and the permission panel shows only "can edit," with no one knowing this came from a group three levels up; over-delivery — the complete authorization derivation tree for every object is expanded by default in the sharing panel, turning routine sharing into a reading-comprehension exercise.
C2-6A normal path is given for unauthorized accessSHOULD
In one sentence: Let people know who to ask, instead of hitting a blank wall.
Applies toproducts where a member might access an object outside their own permissions.
RuleWhen a member accesses an unauthorized object, the product should give an actionable next step: state the nature of the access denial, point to the object or responsible party to request from, and provide a request entry point (see collab.visibility.request.mode). A request MUST have a clear recipient and a result receipt; having no status at all after it is sent out is forbidden. When the existence of the object is itself restricted information, the product may use a response that does not disclose existence; in that case, using an ambiguous response to mask an ordinary situation that could be authorized but has not been is forbidden — the applicable conditions for the two kinds of response MUST be predefined and must not be decided arbitrarily case by case at implementation time.
Boundary conditionsThis rule does not require every product to provide a request-for-access feature; if not provided, it should at least give a responsible party or contact path. Using a response that does not disclose existence is legitimate in security-sensitive scenarios, and its scope of applicability must be recorded.
Design applicationMake the choice between "you don't have access" and "this content does not exist" a policy at the object-category level, not a case-by-case decision. Pre-fill the object identifier in the request entry, so the recipient does not have to ask back "which one do you mean."
Verification examples
- User side: open a link forwarded by a colleague that you don't have access to, and record whether the user can find out who to ask without sending a separate message to inquire.
- Implementation side: check whether the applicable conditions for the two kinds of response follow the predefined policy; verify that after a request is submitted, there is a queryable status and result receipt.
CounterexamplesUnder-delivery — opening the link shows only "403," stating neither whose it is nor whether a request can be made; over-delivery — every unauthorized access uniformly returns "content does not exist," including an ordinary team document that could otherwise be requested with one click, leaving members repeatedly wondering whether the wrong link was sent.
C2-7De-authorization covers actions in flight and derived contentMUST
In one sentence: After the door closes, old pages and pending messages must not still get through.
Applies toproducts where permission may change while editing, queued notifications, or external integrations are running.
Rule
- Once de-authorization takes effect, the server MUST reject new reads and new submissions from the affected subject; long-lived connections, old pages, background queues, and reconnection requests MUST re-verify permission. A stale authorization retained on the client MUST NOT serve as a credential for continued writes.
- Search, thumbnails, comment excerpts, summaries, and pending notifications MUST be filtered by the current recipient's permission; being authorized at generation time does not mean still being authorized at send time.
- The product MUST separately express that de-authorization has been accepted, that the mechanism has taken effect, and which external copies cannot be recalled. When completion cannot be confirmed, it MUST remain "in progress" or "unknown," and MUST block affected new actions; displaying "all recalled" prematurely is forbidden.
- A rejected current input MUST be protected under the established save boundary; recovery, export, and handoff paths MUST NOT re-grant access that has already been lost.
Related configuration: collab.visibility.revocation.policy.
Boundary conditionsA copy already legitimately downloaded cannot be remotely erased; subsequent server-side access must still be blocked, and the actual control boundary of local caches and offline access must be made explicit.
Verification examplesRevoke B's permission while B is editing offline, while a summary pending delivery still exists; B's reconnection must not be able to submit, the summary delivery must not leak content, and A must be able to check whether the de-authorization has taken effect.
CounterexamplesUnder-delivery — the sharing panel already shows the member removed, but an old WebSocket still accepts their writes. Over-delivery — to recall a screenshot, the administrator is required to wait for confirmation from every offline device, so de-authorization takes a long time to take effect.
3.3 C3 Concurrent edits do not swallow input
Two people changing the same spot at the same time is not an exceptional branch in a multi-user product — it is routine. This principle governs the adjudication of this event when it happens: what the policy is, whether it can be seen before it happens, how far auto-merge goes, and who it is handed to when it cannot be merged. The two sides of a conflict each have their own intent, permission, and responsibility; adjudication must follow the pre-declared policy and preserve contributions — it cannot use a timestamp alone to mask lost input.
C3-1The concurrency strategy is declared in advance and consistent with behaviorMUST
In one sentence: What happens when two people edit at once is a design decision, not luck.
Applies toproducts where the same object may be modified simultaneously by two or more members.
RuleThe product MUST predefine a concurrency strategy for every category of co-editable object (at least one of: exclusive locking; first-submit-wins with the rejected input preserved; last-write-wins with the overwritten content preserved and disclosed; semantic auto-merge; or preserving both sides' input for adjudication), and MUST keep actual behavior consistent with what is declared (see collab.concurrency.policy). Silently discarding input from any member that the member has already confirmed is forbidden under any strategy: with first-submit-wins, the rejected side MUST retain their content and be able to reapply it; with last-write-wins, the overwritten side MUST be able to discover the difference and retrieve their original contribution; with auto-merge, the merged result is handled per C3-3. Strategy is permitted to vary by object type within the same product, but an unpredictable strategy switch on the same category of object is forbidden.
Boundary conditionsThis rule does not prescribe which strategy should be chosen — the correct answer differs by content type (structured forms and free text usually call for different strategies). It does not require every object to support simultaneous editing; choosing exclusive locking is a legitimate strategy, whose requirements are in C3-5.
Design applicationDecide the strategy by the content's semantics, not by technical convenience: additions to different paragraphs can usually be merged; the same numeric field, the same payee, or the combination of a delete with an edit usually cannot. Short content is not inherently safer than long content — two people changing one monetary amount at the same time is more dangerous than two people changing two thousand words at once.
Verification examples
- User side: have two members make changes to the same object at the same time, and observe whether the result matches the product's declared strategy and whether both can understand what happened.
- Implementation side: inject concurrent writes and clock skew, and verify no silent loss occurs; check the actual strategy against the declared list for each object type.
CounterexamplesUnder-delivery — two people save a form at the same time, the later save overwrites the earlier, and the earlier person doesn't know their edit is gone; over-delivery — for safety's sake, exclusive locking is applied to every object, so even two people editing different paragraphs have to queue up.
C3-2The part currently being edited is visible in advanceMUST
In one sentence: Don't wait until I've finished writing to tell me someone else is already on this part.
Applies toproducts that support multiple people editing the same object at the same time.
RuleOnce an occupation fact has been obtained that is valid and cleared for presentation, it MUST be perceivable by other members before they begin modifying that block (see collab.concurrency.editing.indicator). The indicator's positioning granularity must be fine enough to allow avoidance — locating to the object without locating to the block does not satisfy this rule on long content.
When the occupation fact is unknown, or cannot be shown due to privacy settings, presenting it as "no one editing" is forbidden; in this case the product must still protect input using the concurrency strategy declared per C3-1. A perceptual indicator does not constitute mutual exclusion: if a product promises "simultaneous editing will not occur," it MUST adopt genuine mutually exclusive admission (see C3-5), and mutual exclusion MUST NOT be inferred from the indicator alone. An anonymized occupation indicator must likewise be assessed for inferable identity exposure — in a two-person space, "someone is editing paragraph three" is effectively naming them. For objects under exclusive locking, the lock status and holder MUST be visible before an edit is attempted, and notifying that content has already been locked only after the user finishes their input is forbidden. This rule addresses the existence and location of editing activity being presented; its upper bound of granularity is constrained by C1-3.
Boundary conditionsThis rule does not require real-time precision down to character position; it requires that the indicator appear earlier than the conflict is produced. This rule does not require eliminating a propagation race: two people starting to edit almost simultaneously while the indicator has not yet propagated does not constitute a violation of this rule — that situation is handled by the concurrency strategy. When the network is interrupted, the counterparty's information is unavailable, or a member has reduced their own visibility per C1-4, the product should present this information as unknown rather than as no-one-editing (see C3-6); withholding the occupation fact under privacy restrictions is a legitimate boundary, but the product must truthfully present it as unknown and continue to protect input — it must not fail to provide an effective indicator while claiming "avoiding others' edits is guaranteed."
Design applicationPlace the indicator at the editing entry point rather than next to the content — people click before they type, and the indicator only has time to work if it appears where they click. For form-type objects, a field-level occupation indicator is far more useful than a whole-form collaborator list.
Verification examples
- User side: have one member edit the middle of a long document, and have another member scroll from the top of the document to that spot and start typing; record when the latter learns someone is already editing there.
- Implementation side: verify the propagation delay and timing of editing-activity information; check whether the positioning granularity reaches an avoidable level.
CounterexamplesUnder-delivery — two people each write a paragraph, and "conflict detected" only pops up at save time, by which point both paragraphs are already finished; over-delivery — the input box locks up the moment anyone's cursor lands within the same screen, and normal collaboration gets judged a conflict.
C3-3Auto-merge has boundaries and its result is identifiableMUST
In one sentence: Merging without conflict is not the same as merging correctly.
Applies toproducts that adopt an auto-merge strategy.
RuleThe applicable scope of auto-merge MUST be predefined by content semantics; treating "technically convergeable" directly as "mergeable in business terms" is forbidden (see collab.concurrency.merge.scope). For a change falling within the auto-merge scope, the merged result MUST be identifiable as a product of merging: each party to the merge MUST be able to see how the result differs from what they themselves submitted, and MUST be able to correct it (see C3-4). Auto-merge MUST define a business risk unit and detectable incompatible combinations: concurrent modification of the same atomic value, a delete combined with an edit that depends on that content, and a defined group of related fields are forbidden from being submitted directly as the authoritative result without an established adjudication. When free text cannot reliably determine semantic incompatibility, the product MUST preserve each party's original contribution, make the merge diff discoverable, and perform a proportionate check before formal release or submission according to its use; promising that "correctness is automatically guaranteed for all semantics" is forbidden.
"The final sentence was not written in its entirety by any single party" does not by itself constitute a violation — a new combination is often the normal product of multi-user collaboration; what this rule forbids is producing a new, harmful business meaning that becomes the authoritative result without adjudication. The occurrence of a merge MUST be recorded and traceable to each party's original contribution (see C4-3).
Boundary conditionsThis rule does not require presenting every merge to the user for confirmation — that would make real-time collaborative editing unusable. It requires that the merge result be identifiable and correctable after the fact, and that high-risk combinations be excluded from the automatic scope. What a convergence algorithm guarantees is that all copies end up eventually consistent; it does not guarantee that the consistent result is what any party wanted, and this distinction must not be blurred in product copy.
Design applicationWrite the auto-merge scope as an explicit list (mergeable: additions to different paragraphs, entries in different fields, two people separately supplementing different background facts that combine into a paragraph no one had written in full before; not auto-mergeable: concurrent modification of the same atomic value, a combination of a delete and an edit, a group of interdependent fields). The configuration record includes the object type, the risk unit, the detection basis, the permitted combinations, the handling path for anything outside the list, the point of formal effect, and the verification use cases. Give the merged product a reviewable diff view rather than only a "synced" message.
Verification examples
- User side: construct a scenario where two people each modify different parts of the same sentence, and check whether the result becomes a sentence neither of them wrote, and whether both can discover it.
- Implementation side: check the auto-merge scope list against actual merge behavior; verify that the merge record can restore each party's original contribution.
CounterexamplesUnder-delivery — two people separately change "launching next Wednesday" to "launching next Friday" and "launching this Wednesday," and the system merges it into "launching this Friday" and shows sync complete; over-delivery — any two people editing the same document one after another are routed to a manual merge screen, and real-time collaboration degrades into sequential approval.
C3-4Conflicts go to someone who can adjudicateMUST
In one sentence: A conflict should not be decided alone by whoever unluckily submits last.
Applies toproducts where conflicts may arise that require human adjudication.
RuleA conflict that cannot be auto-adjudicated MUST preserve each side's content and be handed to a subject who has both permission over and responsibility for that content (see collab.concurrency.arbiter). Defaulting the adjudication responsibility to whoever submitted last is forbidden, unless that person happens to be the responsible subject; when the adjudicator lacks the basis for a judgment (not knowing the other party's intent, not authorized to view the other party's content), the product MUST provide a contact or handoff path rather than requiring a choice between two options with no basis. The result of the adjudication MUST be knowable to all affected parties; letting a party whose contribution was rejected discover their content has vanished without notice is forbidden. While a conflict is pending adjudication, all sides' content MUST remain accessible; only one side being preserved is not permitted.
Boundary conditionsThis rule does not require the product to implement an approval workflow or assign an arbitrator; on an object with no clear responsible subject, handing adjudication to the initiator while notifying the other party is acceptable. What it forbids is disguising adjudication as an ordinary save-conflict prompt.
Design applicationBuild the adjudication interface as "both pieces of content side by side + each author + a way to contact them," not as two buttons "keep mine / keep theirs" — the latter is a meaningless choice when the adjudicator does not know the other party's intent. See C5-1 for resolving the responsible subject.
Verification examples
- User side: create a real conflict, and observe who the adjudication interface appears to, whether they have the information to make a choice, and how long it takes for the other party to learn the result.
- Implementation side: check whether the adjudicator-resolution rule matches the responsible-subject field; verify that both sides' content remains retrievable while adjudication is pending.
CounterexamplesUnder-delivery — an intern saves last, and the system pops up "keep your content or the server's," they choose their own, and the architect's two hours of edits vanish with no one notified; over-delivery — every conflict is forced through a round of cross-department confirmation, so a simple text conflict takes two days to resolve.
C3-5An exclusive lock has a holder and a time limitMUST
In one sentence: If the person who locked it has gone home, the file must not stay locked forever.
Applies toproducts that adopt exclusive locking or a check-out mechanism.
RuleEvery lock MUST have a visible holder, an acquisition time, and a validity period (see collab.concurrency.lock.ttl). A lock with no time limit and no release path is forbidden to exist: the product MUST provide at least one forced-release path, whose trigger conditions (timeout, holder offline, action by the responsible subject or an administrator) MUST be predefined and knowable to members. A forced release MUST NOT delete an already-persisted draft or actively clear the holder's local input. The product MUST state where the draft is saved, its retention boundary, and the conditions for retrieving it; input that exists only on an offline device MUST NOT be claimed as already backed up on the server. On reconnection, the holder first verifies current editing permission and the lock credential, then restores the original input as a pending draft — overwriting someone else's work with an expired lock is forbidden. Retrieval remains subject to current permission; after de-authorization, restoring a draft must not be used as a back door to re-read restricted source content. The acquisition and release of a lock MUST be recorded and traceable. When the account holding a lock is disabled or removed (see C5-3), the lock it holds MUST enter a releasable state.
Boundary conditionsThis rule does not require locks to have a short timeout — a long validity period is correct for some workflows; it requires that a time limit exist, be visible, and have a release path. It does not apply to millisecond-scale internal concurrency control, only to locking states visible to the user that would block someone else's work.
Design applicationPresent the four facts — who locked it, when, how much time remains, and how to contact them — together in one place. Show the impact before release; notify the holder if reachable, and retain a queryable event if they are offline. Retain a saved private draft within the bounds permission allows; do not claim to have retrieved content that exists only on an offline device.
Verification examples
- User side: have the holder power off while holding the lock, and observe how long it takes other members to resume work and what path is required.
- Implementation side: after a forced release, check that the original holder can retrieve their saved draft within the bounds permission allows; check that the limitation on unbacked-up offline-device input is stated; check the completeness of the lock record.
CounterexamplesUnder-delivery — a colleague checks out a design source file and then takes two weeks of vacation, forcing the team to start over on a new copy; over-delivery — a lock auto-releases after five minutes of no activity, and someone who was still thinking finds their content already changed by someone else the moment they look back.
C3-6The promise of convergence is stated separately from what others can seeSHOULD
In one sentence: "What I see is the latest" and "what I changed, others can see" are two different things.
Applies tomulti-user products with sync latency or an offline-editing capability.
RuleThe product should separately express two groups of state — inbound (whether what this person sees already includes others' latest changes) and outbound (whether this person's changes have been persisted, accepted by the server, and distributed to the target scope) — and should not let a single "synced" indicator carry both at once (see collab.concurrency.convergence.presentation). This person's submission being accepted does not prove this person has received others' concurrent or earlier changes — the two facts are supported by different evidence. Each dimension must have "unknown" and "failed" semantics; a counterparty's receipt can only prove that specific client received it — stating this as "everyone has seen it" on that basis is forbidden. Evidence of this person's own viewing is provided only per the records authorized under C1-5, and is not inferred from distribution receipts. The object snapshot, update time, receipts, and target member set of a given sync are operational facts, not written by configuration. When others' changes are unavailable (network interruption, counterparty offline), presenting this state as no-one-editing or as content-is-current is forbidden (see C3-2). How a modification made while offline is handled on reconnection must be consistent with the strategy declared per C3-1, and silently overwriting others' changes not seen while offline is forbidden.
Boundary conditionsThis rule does not require presenting both states for every keystroke; aggregating to block level or session level is acceptable. It does not require giving a specific numeric commitment for latency — that is measured and documented by the product according to its own architecture. "Convergence" is the technical property that all copies end up eventually consistent after executing the same set of operations, not a guarantee that anyone has actually read it; the two must not be conflated in product copy.
Design applicationDesign an explicit editing-state indicator for "not connected," rather than letting the interface look like everything is fine. After reconnecting, present "what others did while you were offline" as a reviewable moment, rather than simply merging the result in and calling it done.
Verification examples
- User side: keep editing after going offline, then reconnect, and record whether the user can say which changes are their own and which are someone else's from that period.
- Implementation side: verify that the editing-activity indicator while disconnected does not present as no-one-editing; check that the offline-change merge path is consistent with the declared strategy.
CounterexamplesUnder-delivery — reconnecting after two hours offline, the interface shows only "synced," and the user does not know they overwrote three of someone else's edits; over-delivery — a sync-status prompt pops up for every tiny delay, and the editing process is drowned in status bars.
3.4 C4 A personal operation has an explicit scope of effect
In a single-user product, the consequence of an operation lands only on the operator themself; in a shared space, the same action lands on someone else too. This principle governs the effect one person's single operation produces on a shared object, the boundary of that effect, and who it belongs to. The single easiest thing to get wrong in this domain is right here: in a single-user product, undo equals "go back to the previous state"; in a multi-user product, that equation no longer holds — the previous state contains someone else's work.
C4-1Undo undoes one's own stepMUST
In one sentence: Undo means "undo what I did," not "undo the last step."
Applies toproducts that offer undo capability on shared objects.
RuleUndo on a shared object MUST resolve to undoing the previous step (or a specified step) taken by the member who executes the undo, on that object; it is forbidden to implement it as reverting the object's global most-recent change (see collab.action.undo.scope). Undo MUST select the executing member's own contribution within the declared undo context, and is forbidden from selecting someone else's global most-recent change; the implementation is not prescribed — a per-member undo history, filtering by operation source, or an equivalent mechanism are all acceptable, and this rule does not prescribe a data structure or storage key. The product MUST predeclare the boundary of "this person" as an operation source: whether multiple tabs of the same member, an operation performed on someone's behalf, and a subsequent Agent rewrite each count. What an undo targets and its scope of effect MUST be resolvable before execution. When this person has no undoable operation, undo MUST have no effect and state this truthfully; falling back to undoing someone else's most-recent change is forbidden.
Boundary conditionsThis rule does not prescribe the depth of the undo stack, nor does it require undo to persist across sessions. It does not preclude the product separately offering an ability to "roll back to a historical snapshot" — that is history recovery, not undo, and the two are forbidden from sharing the same entry point and the same shortcut key. When this person's own step cannot be undone in isolation without affecting others, it is handled per C4-2.
Design applicationFirst write out clearly "what counts as this person's own step" — whether it is filtered by member, by session, or by operation source; this is the core of this rule's implementation, and which mechanism to use is up to the product. For structural operations (move, reorder, bulk assign), be able to answer "whose subsequent actions would undoing it carry along with it" — if you cannot answer, present the scope per C4-2 first.
Verification examples
- User side: member A makes an edit, member B then makes an edit on the same object, and A presses undo; check whether what gets undone is A's edit or B's edit.
- Implementation side: check whether the undo's selection rule targets the executor's own contribution and whether the context boundary has been declared; verify that when there is no self-undoable operation, the behavior is "no effect, stated truthfully." Also construct five situations — A and B editing interleaved, this person having no history, the same person in two tabs, an operation performed on someone's behalf, and a subsequent Agent rewrite — and check the retrieval result for each.
CounterexamplesUnder-delivery — a new hire presses undo twice on a shared whiteboard and undoes an entire flowchart a senior colleague just finished drawing, with no one knowing who did it; over-delivery — to absolutely avoid affecting others, any undo after someone else has made a subsequent operation is uniformly disabled, so a user cannot even undo their own just-mistyped character.
C4-2Undo does not silently roll back someone else's workMUST
In one sentence: To roll back someone else's changes along with mine, say so clearly first, then roll back.
Applies toproducts where undo on a shared object might affect someone else's subsequent changes.
RuleWhen one of this person's steps has a dependency relationship with someone else's subsequent changes, such that undoing that step necessarily affects the other person's changes, the product MUST state the scope of the impact before execution (which changes, from which members) and obtain the executor's confirmation; silently cascading the rollback is forbidden (see collab.action.undo.cascade). After a cascading rollback occurs, the affected member MUST be able to learn of this fact and retrieve their rolled-back content. If the product chooses not to support this kind of undo, it MUST truthfully state the reason for not supporting it and any feasible alternative path; appearing as undone while actually not taking effect is forbidden.
Boundary conditionsThe impact prompt is shown only when the undo target has a subsequent dependency from someone else, or that dependency cannot be ruled out; it is not permitted to block all undo merely because the object has ever been edited by someone else. Execute directly when there is no cascading impact. When the implementation cannot undo safely, it preserves the current result and provides a correction or retrieval path; it is not required to adopt any particular dependency-analysis algorithm.
Design applicationWrite the prompt as a consequence, not as jargon — "undoing this step will also remove the two comments Li Si added afterward," not "a dependency conflict exists." The retrieval entry for the rolled-back party should appear in their own change record, rather than requiring them to dig through a recycle bin.
Verification examples
- User side: construct a scenario where A's operation is depended on by B's subsequent operation, have A execute undo, and check whether the prompt states the scope of impact and whether B learns of it.
- Implementation side: verify that cascaded rollback content can be retrieved by the affected member; check that no extraneous confirmation is produced when there is no subsequent change from someone else.
CounterexamplesUnder-delivery — undoing a table-structure adjustment also clears twenty rows of data someone else filled into the new column, and the interface just shows "undone"; over-delivery — as long as the object has ever had any operation from someone else, every undo pops up a lengthy impact analysis requiring the user to check a box to confirm.
C4-3Every change has a resolvable authorMUST
In one sentence: Who wrote this line — a person or an Agent — must be traceable.
Applies toproducts where multiple members can modify the same object.
RuleEvery change on a shared object MUST be resolvable to an author subject, and MUST be queryable within the declared retention period (see collab.record.authorship, collab.record.retention.ttl). The author subject MUST distinguish at least three categories: a member's own operation, an operation performed on their behalf by someone else (delegation, impersonated login, admin-performed action), and an operation performed by automation or an Agent; the output of automation or an Agent MUST indicate its execution source, and an operation performed on someone's behalf MUST record both the actual executor and the party represented. Author-subject attribution is forbidden from being rewritten upon a responsibility handoff, a member's rename, or account deactivation (see C5-4). It is permissible for something to become unqueryable once the retention period expires, but that period MUST be predeclared and must not appear as "never recorded."
Boundary conditionsThis rule does not require showing the complete change history to every member — the permission to view history is determined per C2. It does not require recording every single keystroke: the recorded granularity should be proportionate to the undo unit and adjudication needs, and applies alongside the upper bound of perceptual granularity in C1-3 (the change record is for the content, not for evaluating the person; the purpose constraint is in C1-6).
Design applicationMake "so-and-so (via automation)" and "so-and-so (performed by an administrator on their behalf)" a presentation distinguishable from an ordinary signature, rather than all showing the same name — in a post-hoc investigation, this distinction is often the entire crux of the matter.
Verification examples
- User side: have an administrator perform a modification on behalf of a member, and check who other members see as the author and whether it is apparent this was performed on someone's behalf.
- Implementation side: check that the three author categories are recorded separately; verify that after a member is renamed or deactivated, the subject attribution of historical authors is not rewritten.
CounterexamplesUnder-delivery — an integration bot bulk-modifies two hundred records under a shared account's name, and history shows them all under that account with no way to tell which automation trigger caused which; over-delivery — every single cursor movement and selection is written into the change history, making the history panel too long to be usable (this also violates C1-3).
C4-4The scope of effect is explicit before executionMUST
In one sentence: Know before pressing whether this changes just mine or changes everyone's.
Applies toproducts with operations that have different scopes of effect for different members.
RuleWhether an operation takes effect only for this person, for specified members, or for everyone MUST be knowable to the operator before execution (see collab.action.effect.scope). The default ownership of shared view versus personal view MUST be explicitly defined: when changing presentation state such as filtering, sorting, grouping, collapsing, display density, or column width, the product MUST make clear where the change lands, and is forbidden from letting both kinds of change share the same entry point with different results (the default ownership of personal state is in C6-3). A structural operation affecting everyone (rename, move, change hierarchy, bulk modify, apply a template, change a workflow state) MUST state, before execution, how many objects it affects and the scope of impact. Omitting the statement of scope on the grounds that "it can be undone afterward" is forbidden — undo is not without cost in a multi-user setting (see C4-2).
Boundary conditionsThis rule does not require a confirmation pop-up for every operation; the statement can be a persistent indicator at the entry point ("currently editing the shared view"), with confirmation-tiering requirements in C4-5. It does not require listing every affected object; giving a count and category suffices.
Design applicationMake "shared view" and "my view" two visible states that are always displayed to show the current location, rather than a toggle hidden deep in a menu — most incidents of accidentally changing a shared view happen because the person did not know which side they were currently on.
Verification examples
- User side: have a member adjust a filter on a board, and record whether they know whether other people's boards changed too, and how they found out.
- Implementation side: check that the ownership definition for each type of presentation state matches its actual storage location; verify that structural operations give an impact count before execution.
CounterexamplesUnder-delivery — a member changes a filter to find one card, and the whole team of thirty people's board changes along with it, without the member even knowing; over-delivery — every column-width adjustment pops up asking "should this change apply to just you or to everyone."
C4-5Destructive operations on shared objects are held to a stricter standardMUST
In one sentence: Deleting your own thing and deleting everyone's thing are not the same act.
Applies toproducts that allow deleting, archiving, or invalidating an object someone else is currently using.
RuleThe severity tier of a destructive operation's consequence MUST take as inputs whether the object is visible to others, whether it is referenced by others, and whether others are currently working in it (see collab.action.destructive.level). When deleting or archiving an object that contains someone else's contribution, the product MUST state before execution whose content will be affected; removing someone else's contribution irrecoverably along with the object is forbidden without providing a way to preserve or export that contribution. A party referencing the deleted object (a link, an embed, a task dependency) MUST be able to learn that the object is no longer available; presenting it as blank or silently failing is forbidden. Executing a delete on an object someone else is currently editing MUST first present an invalidation notice on any reachable editing interface and protect their input; a session for which interface delivery has not been confirmed MUST stop accepting subsequent shared writes, and on reconnection must check the status before continuing. Delivery does not prove the person has actually read it; emergency de-authorization does not wait for user confirmation.
Boundary conditionsThis rule does not require forbidding deletion of shared objects, nor does it require every deletion to go through approval. It does not change the general handling of objects with no contribution or reference from others. Data-retention and compliance deletion requests (such as personal-information deletion) execute under their own rules; where they conflict with this rule's "preserve contribution" requirement, applicable regulation governs.
Design applicationWriting "this document contains seventeen comments from three colleagues" into the delete confirmation is far more useful than "this action cannot be undone." Give referencing parties an explicit invalidation presentation ("the referenced content has been deleted"), rather than letting the link silently go dead.
Verification examples
- User side: delete a document that has comments from multiple people and references from others, and check whether the deleter is told the scope of impact, and whether commenters and referencers learn of it.
- Implementation side: check that the severity-tier inputs include visibility, references, and online-editing status; verify a retrieval path exists for someone else's contribution.
CounterexamplesUnder-delivery — archiving a project wipes out all discussions from five members along with it, and members afterward neither receive a notification nor can retrieve the content; over-delivery — deleting even a blank card you just created yourself requires filling out a reason and waiting for administrator approval.
C4-6Bulk operations do not produce a proportional amount of interruptionSHOULD
In one sentence: Changing a hundred items is not the same as sending a hundred notifications.
Applies toproducts that offer bulk operations that produce reminders to others.
RuleThe reminders a single bulk operation produces for each affected member should be aggregated into an understandable whole, rather than sent one by one in proportion to the number of affected objects (see collab.action.batch.notice). The aggregated reminder still MUST let the recipient see the specific items relevant to them; aggregating down to something like "47 updates" with no way to judge whether action is needed is forbidden. Producing the reminder as a silent side effect of the operation is forbidden: when performing a bulk assignment, bulk status change, or bulk @-mention, the operator should know before execution who this operation will interrupt (see C4-4).
Boundary conditionsThis rule does not require suppressing individual critical reminders (such as being assigned a task that needs immediate handling); an emergency exception must predefine the triggering event conditions, the eligible subjects, and how the recipient is informed. It does not forbid offering a "don't notify for this change" option, but that option must not become a way to evade the scope-change notification required by C2-2.
Design applicationPut "this operation will notify 12 people" in the bulk-operation confirmation. Keep an expandable detail behind the aggregated reminder for affected parties, so someone can judge within one screen which items need their own action.
Verification examples
- User side: bulk-assign thirty cards to the same person, and record how many reminders that person receives and whether they can quickly see which need attention today.
- Implementation side: check whether the bulk path reuses the single-operation reminder logic; verify the aggregated reminder still contains judgeable detail.
CounterexamplesUnder-delivery — bulk-adjusting the due date of thirty cards sends the assignee thirty push notifications; over-delivery — all changes are aggregated into one daily-summary notification, so even an urgent assignment has to wait until the next morning.
C4-7Retries and partial success each have their own distinct resultMUST
In one sentence: Not receiving a receipt does not mean it wasn't done; if only part succeeded, say which part.
Applies tocollaborative operations that may be retried or partially completed, such as sending comments, invitations, bulk modifications, or responsibility transfers.
Rule
- The system MUST distinguish the operation request, its actual taking effect, and the result receipt. A timeout or a lost receipt MUST NOT be directly interpreted as not having executed; success or failure can only be determined once the actual result is queried.
- Resubmitting the same operation MUST recognize its operation identifier, or use an equivalent mechanism to prevent side effects such as duplicate comments, duplicate invitations, or duplicate responsibility transfers. When the result is unknown and safe retry cannot be proven, a way to check or handle it manually MUST be provided; automatically replaying the whole batch is forbidden.
- A bulk operation MUST record success, failure, not-executed, and unknown by object, and display the detail to those authorized to view it; partial completion MUST NOT be presented as complete success. A retry handles only items already confirmed retryable, and re-verifies current permission and the object snapshot.
- Multi-channel reminders for the same business event MUST be linked to that same event; a resend after failure MUST NOT bypass the recipient's mute setting and delivery permission.
Related configuration: collab.action.retry.policy, collab.action.delivery.policy.
Boundary conditionsThis rule does not require absolute exactly-once delivery across every system; it requires that duplicates be recognizable, that results not be misreported, and that unknowns not be blindly retried.
Verification examplesBulk-reassign ten items; the connection drops after three succeed. Before retrying, query the result of each item; do not reassign or renotify the succeeded items, and continue checking the unknown ones.
CounterexamplesUnder-delivery — a user sees "send failed" and clicks again, and the comment and the email each end up appearing twice. Over-delivery — the slightest network delay disables all collaborative operations with no way to check the result.
3.5 C5 Responsibility has an owner and can be handed off
Participating is not the same as being responsible. A document with eight collaborators does not answer "who owns this right now"; a task card with five watchers does not answer "who is driving it forward." This principle governs the ownership of responsibility and decisions, including whether ending a discussion produces an effective decision; the responsible-subject field: it must exist, must have an answer (including "no one responsible" as a legitimate answer), must be transferable between people, and must have a clear destination when a person leaves. It does not govern how an organization divides labor — that is a management system, outside the scope of these guidelines; it governs keeping the product's expression of responsibility from creating a state of no-one-responsible that is invisible as such.
C5-1The current responsible subject is resolvableMUST
In one sentence: The list of participants does not answer "who is responsible right now."
Applies toproducts with objects (tasks, approvals, content, spaces) that need someone to drive or maintain them.
RuleEvery object that needs someone responsible for it MUST, at any moment, be resolvable to its current responsible subject, or explicitly resolve to no one responsible (see collab.ownership.assignee). Substituting a participant list, a watcher list, the most recent editor, or the creator for the responsible subject is forbidden. "No one responsible" MUST be an explicit state that can be queried and presented; it must not appear as an empty field visible to no one. When the responsible subject is a group, the claiming rule within that group must be stated (at least one of: first-come-first-served, rotation, must be designated) — otherwise group responsibility is equivalent to no one responsible. An object's responsible subject and its visible scope are two dimensions, and inferring one from the other is forbidden (being able to see it does not mean being responsible for it; being responsible for it does not mean being able to see everything).
Boundary conditionsThis rule does not require every object to have a responsible subject — purely reference content can simply be recorded as not applicable. It does not prescribe an upper limit on the number of responsible subjects, but when there are multiple, it must be possible to answer "whose action counts as driving it forward."
Design applicationMake "unassigned" a normal state that can be filtered and counted, rather than a blank. Regularly surface objects that are "no one responsible, and unchanged for a long time" — this kind of object is the most common form of silent failure in collaboration systems.
Verification examples
- User side: take twenty in-progress tasks at random, have the team each state their own understanding of the current owner, and record the proportion of inconsistent or unanswerable responses.
- Implementation side: check whether the responsible-subject field is independent of the participant and creator fields; verify that "no one responsible" can be queried and filtered.
CounterexamplesUnder-delivery — a task card has six avatars on it, everyone assumes someone else is doing it, and two weeks later no one has moved it forward and no one has noticed; over-delivery — every document and every comment is required to have a named responsible person designated before it can even be created.
C5-2A handoff is a two-sided eventMUST
In one sentence: Assigning it out does not mean it has been taken up.
Applies toproducts that allow responsibility to be transferred from one subject to another.
RuleA responsibility transfer MUST record the receiving party's evidence of awareness and the actual effective state of current responsibility; presenting a one-sided assignment action directly as a completed handoff is forbidden (see collab.ownership.handoff.mode). The product MUST separately express four factual dimensions: initiated / delivered-or-accessible / awareness-evidence status / accepted-or-not. Delivery, client-side display, a read receipt, the person's own confirmation, and acceptance are different kinds of evidence and must not substitute for one another: when valid awareness evidence has not been obtained, display "awareness unknown"; asserting "not yet viewed" on that basis is forbidden; being aware also does not automatically mean having accepted it. When an assignment model that does not require the recipient's confirmation is used, the responsibility-effective rule MUST be predefined, and "awareness unknown" must be visible to both the initiator and anyone querying responsibility. When read records are turned off (see C1-5), acceptance may be proven by an explicit confirmation or a performance action bound to that specific handoff; rebuilding a general-purpose read record for this purpose is forbidden. When the recipient declines or awareness evidence is not obtained for a long time, responsibility MUST return to a definite state (back to the initiator, back to no one responsible, or transferred per a predefined rule); it is forbidden to remain in a dangling state that belongs to neither the initiator nor the recipient; this fallback requirement applies to every assignment model, including one-sided assignment. The respective effects of decline, revocation, reassignment, expiry fallback, repeated confirmation, and confirmation of an already-invalidated request MUST be predeclared; the release of responsibility is judged only against the currently valid handoff-request identifier — a confirmation aimed at a request that has already been reassigned does not accept new responsibility. When a model requiring acceptance is used, the original responsibility or a defined temporary owner is retained pending acceptance; when one-sided assignment is used, responsibility transfers at the predeclared point in time, but that taking-effect fact must not be stated as the recipient having become aware of it or having accepted it.
Boundary conditionsThis rule does not require implementing confirmation-based assignment — many teams' way of working is not suited to confirming every single time; it requires that insufficient awareness evidence not be hidden, nor rewritten into "not viewed." When the system auto-assigns by rule (round robin, load balancing), the awareness requirement applies equally.
Design applicationChange the default presentation after an assignment from "assigned to Li Si" to "assigned to Li Si · awareness unknown" — do not write "not yet viewed": the absence of a receipt only shows the product has no evidence, not that the person hasn't seen it.
Verification examples
- User side: assign a task to a member who is on leave that day, and observe the state the initiator sees on the interface, and what the task's ownership looks like a week later.
- Implementation side: check whether the four states are stored and presented separately; verify that the fallback rule actually executes when awareness evidence is not obtained for a long time. Also construct: obtaining the task from a notification after read records are disabled, explicit acceptance, acceptance after expiry, two people reassigning at the same time, and confirmation after being deactivated — for any of these receipt-lacking situations, "not yet viewed" must not be displayed, and confirmation aimed at an already-invalidated request must not accept new responsibility.
CounterexamplesUnder-delivery — a task is assigned to a colleague who left half a month ago, and the board keeps showing "in progress · owner: Zhang San"; over-delivery — every assignment requires the recipient to click confirm, and while the recipient is in a meeting, the task sits stuck at pending-confirmation the whole time.
C5-3Leaving and transfer are symmetricMUST
In one sentence: When a person leaves, the things under their name must not just go unreachable in place.
Applies toproducts where a member may leave, be removed, or have their account deactivated.
RuleWhen a member leaves, is removed, or has their account deactivated, the responsibility, content, and permissions under their name MUST each have a clear destination: transfer to a designated subject, convert to organization or space ownership, archive, or be explicitly recorded as ownerless (see collab.ownership.offboarding). Making content under a member's name inaccessible with no disposition path after that member disappears is forbidden, and the system silently transferring ownership to some subject who was never informed is also forbidden. The disposition must be ascertainable: who transferred which objects to whom and when must be queryable within the retention period (see C5-4). When a member is removed, any lock they hold MUST enter a releasable state (see C3-5), and their incomplete handoffs are handled per the fallback rule in C5-2. Termination of permission must not be conditioned on the handoff having completed; a failed object enters a restricted, queryable custodial state, to be handled by a clearly designated responsible party. Content produced by the member themself that is personal (private drafts, private notes) must be disposed of separately from content belonging to the shared space; the default disposition of the former must not be merging it into the shared space (see C6-1).
Boundary conditionsThis rule does not prescribe the specific ownership of the disposition — that is determined by organizational policy and applicable regulation; it requires that a disposition path exist, be executed, and be queryable. It does not exempt statutory obligations such as personal-information deletion; when these obligations conflict with "content retention," applicable regulation governs, and the existence of the conflict should be stated in the product's documentation.
Design applicationMake the departure flow a checklist rather than a delete button: N items of responsibility under their name, M exclusive holdings, K pieces of personal content, with disposition options given for each category. On a normal departure, check the disposable objects in advance; on emergency de-authorization, terminate access first. When a handoff fails, retain the restricted custodial state, the handling responsible party, and the next step, without expanding the audience for personal content.
Verification examples
- User side: deactivate an account that holds multiple tasks, multiple exclusive locks, and several private drafts, and check the actual destination of each category and whether it can be ascertained.
- Implementation side: check the completeness of the disposition record; verify that after removal there is no object that is both inaccessible and lacking a disposition entry.
CounterexamplesUnder-delivery — a colleague leaves, and the dozen shared documents they created become ownerless, with no one able to change the permissions or delete them; over-delivery — the moment a member is removed from a project, all of their historical comments and change records are deleted along with them, and the discussion context disappears.
C5-4A change in responsibility does not rewrite historical attributionMUST
In one sentence: After the owner changes, who wrote something before is still who wrote it.
Applies toproducts that record change history or contribution attribution.
RuleWhen the responsible subject changes, a member is renamed, or an account is merged or deactivated, the author attribution of a change that has already occurred is forbidden from being rewritten to the new responsible subject (see C4-3, collab.record.authorship). A member identifier in the historical record should resolve to the same subject after their display name changes, but rewriting a person's historical contribution under someone else's name is forbidden. When a personal identifier must be removed from history due to a statutory deletion request or organizational policy, the disposition MUST be explicit anonymization or removal, and that disposition itself MUST be identifiable as such; implementing it by substituting someone else's name is forbidden. The point in time of a responsibility handoff MUST be queryable, so that "whose period of responsibility did this change occur in" can be answered.
Boundary conditionsThis rule does not require permanently retaining history — the retention period is declared per collab.record.retention.ttl. It does not forbid highlighting the current responsible subject on the interface, only forbids overwriting the historical author with the current responsible subject.
Design applicationStore the member identifier separately from the display name — this is the implementation precondition for this rule. Design a dedicated historical presentation for "this member has left," rather than replacing the name with a blank or with the successor's name.
Verification examples
- User side: hand a task with contribution history from multiple people to a new owner, and check whether the authors of prior changes in the history still show as the original authors.
- Implementation side: after executing a member rename, account deactivation, and a responsibility handoff, check the historical author field for each in turn; verify that an anonymization disposition is identifiable.
CounterexamplesUnder-delivery — after a task is handed off, every prior operation's executor in the history now shows as the new owner, completely distorting accountability; over-delivery — to preserve the completeness of history, a departed member's name and contact information are kept permanently in the system with no disposition path at all, conflicting with personal-information handling requirements.
C5-5The boundaries for external and temporary members are explicitSHOULD
In one sentence: When a guest's access expires, and who owns what they left behind after it expires.
Applies toproducts that allow members outside the organization, guests, or temporary permissions to participate in collaboration.
RuleThe scope of participation, validity period, and post-expiry disposition for external and temporary members should be explicitly defined at the time of grant (see collab.ownership.guest.policy). A temporary permission MUST have a clear expiry point; a long-term external grant MUST have a review-responsible party and a review cycle. After expiry or exit, the content they previously produced and their contribution to shared content MUST have a clear attribution (retained and marked with its source, converted to organizational ownership, or removed per agreement), and that attribution must be knowable to internal members. While an external member is present, the product should make internal members able to perceive this fact — in a space with an external participant present, internal members' judgment of "who can see this sentence" is systematically biased toward optimism.
Boundary conditionsThis rule does not require distinguishing every category of member; a product that does not distinguish internal from external can be recorded as not applicable. It does not prescribe the length of the validity period — that is measured by the product and organization according to their own risk and its basis recorded. The strength within this rule is not uniform: "temporary permission expiry, long-term external-grant review" and "contribution attribution must be clear" are non-turnoffable baselines; "external participation being perceivable by internal members" is at the SHOULD level, and when there is real reason to deviate, the reason and alternative are recorded. A long-term external collaborative identity is not to be uniformly treated as a temporary guest merely because it is classed as an external subject — its term and review method are declared according to the actual relationship.
Design applicationMake the identifier for external participants a persistently visible presentation (not just a small tag in a member list), especially in the context of comments, mentions, and notifications. Give the responsible subject a chance to renew or dispose of it before expiry, rather than going straight to disconnection at expiry.
Verification examples
- User side: invite an external guest into a discussion, and have internal members answer "who can currently see this discussion," recording the proportion who answer correctly.
- Implementation side: check whether a temporary permission has a validity period and a review; verify that after expiry, the disposition of their content is executed as declared.
CounterexamplesUnder-delivery — an account temporarily opened for an external review two years ago is still valid, and can still open the current content of that batch of documents; over-delivery — internal members must get confirmation from an internal member before every single thing an external member says, and the review meeting cannot proceed.
C5-6Discussion, resolution, and decision are each recorded separatelyMUST
In one sentence: Ending a discussion does not mean everyone agreed; an approval covers only the content as it stood at that time.
Applies toproducts that provide comment threads, suggestions, review, voting, or joint decision-making.
Rule
- A comment MUST be bound to a stable object and content anchor; when the anchor becomes invalid, the original context is preserved or it is explicitly marked as unable to be located — silently attaching it to other content is forbidden. Retention and retrieval are subject to current access permission.
- A thread MUST distinguish open, resolved, reopened, deleted, or restricted; a resolve action MUST be traceable to the operator and time, and an authorized member MUST have a path to reopen or raise an objection. Resolving does not delete disagreement, nor does it automatically prove all participants agreed.
- When an approval, vote, or confirmation will trigger subsequent execution, the product MUST define the eligible decision-makers, the conditions required, and the object snapshot and scope targeted; no reply, a read receipt, a like, or closing a thread is forbidden from being automatically converted into an approval on its own. If expressing a stance is itself a formal vote, its meaning MUST be made clear before participation.
- When the content covered by an approval or a key condition changes after approval, it MUST be re-verified per predefined invalidation conditions; an expired decision cannot automatically approve newly added content. An automated summary MUST identify its sources, preserve unresolved items, and must not rewrite a minority opinion into unanimous agreement.
Related configuration: collab.ownership.discussion.policy, collab.ownership.decision.policy.
Boundary conditionsThis rule does not require every discussion to go through voting or approval; ordinary chat does not need a decision gate set up. The corresponding rules are enabled only when a formal decision is needed.
Verification examplesAfter B raises an objection to a passage and A deletes that passage, the thread can still state the original target; A marking it resolved does not display unanimous agreement; when key content changes after approval, re-verification is required.
CounterexamplesUnder-delivery — three likes on a task discussion are automatically recorded as three approvals, and the original dissenting opinion disappears from the summary. Over-delivery — fixing a single typo requires every commenter to re-sign off.
3.6 C6 There is private room within a shared space
If every character a person types is immediately visible to the whole team, they will stop trying things. This principle governs the portion of state in a shared workspace that belongs to the individual: a draft not yet finished, a comment not yet decided on, a filter condition meant only for oneself to see, and that "let me try this first." It specifies when these states start being visible to others, and how members control their own attention, following behavior, and scope of participation. Its difference from C4 lies in the regulatory object: C4 governs what effect my operation produces on others; C6 governs when my state starts being seen by others.
C6-1Unfinished work is not sent out by defaultMUST
In one sentence: Something not yet finished should not already be visible to others.
Applies tomulti-user products that provide content creation, commenting, or submission capability.
RuleUnfinished input MUST default to being visible only to the person themself: drafts, unsent comments, unsubmitted edits, unpublished changes (see collab.private.draft.default). Converting from not-yet-finalized to shared-visible MUST be an explicit action; using autosave, losing focus, a timeout, or closing the page as the publishing action is forbidden. When a product provides real-time collaborative editing (content becomes visible to others as it is typed), this property MUST be knowable before entering the edit, and at least one path that produces not-yet-finalized content MUST exist. The criterion for "private, not yet finalized" is that the content's actual access scope is limited to the author alone: a suggestion, branch, or copy satisfies this rule only when its access scope is in fact limited to the author; a shared suggestion mode satisfies the need for "not directly changing the formal content" but does not satisfy the need for a private draft — it is visible to the owner and can be accepted or rejected. Not-yet-finalized content is forbidden from entering search, notifications, summaries, or exports that face other people (see C2-4).
Input retention: The product MUST state where a private draft is saved and the boundary of its recovery; switching pages, a failed publish, or a permission change must not actively clear saved input. When persistent saving is not possible, the risk MUST be flagged before leaving the edit, and a retention path subject to permission constraints MUST be provided; using "saved" to mask a save failure is forbidden.
Boundary conditionsThis rule does not deny the value of real-time collaborative editing — it is the core value of this kind of product; what it requires is that this property be known, and that it not be the only available mode. An editing-activity indicator visible to others during collaboration (C3-2) is not the content-being-sent-out this rule addresses.
Design applicationMake "draft" and "published" states of the content itself rather than two different storage locations — putting them in different locations causes people to leave a draft in place and forget to publish it. For high-frequency not-yet-finalized content such as comments, retain a local draft across sessions, and make clear it has not been sent.
Verification examples
- User side: close the page after typing half a comment, and check whether that content has already become visible to others, and whether it is still there when reopened.
- Implementation side: check that not-yet-finalized content is excluded from the search index, notification digests, and exports; verify there is no publishing path triggered by timeout or loss of focus. Using two accounts, check the six paths of suggestion, branch, copy, notification, search, and export one by one: after one account writes unpublished content, the other account must not be able to obtain that content through any of these paths. Also take an undoable shared filter operation and check that it is not mistakenly counted as a qualifying exploration path.
CounterexamplesUnder-delivery — content in a comment box is visible to the whole team in real time as it is typed, and a sentence said three times and edited twice is all seen by everyone; over-delivery — every edit must first be written into a private draft and manually published, rendering real-time collaboration capability meaningless in practice.
C6-2Exploratory operations have a path that does not affect othersMUST
In one sentence: Wanting to try something should not require alerting everyone first.
Applies toproducts where a modification to a shared object takes effect for others immediately.
RuleThe product MUST provide at least one path for making an exploratory modification to a shared object without immediately affecting others: at least one of a personal view, a suggestion mode, a branch or copy, or a sandbox or preview (see collab.private.sandbox.mode). Making "directly modifying shared state" the only viable way to try out a change is forbidden. Whether a path qualifies is verified separately by whether it produces content, a notification, or a shared-state change visible to others; "the operation can be fully undone" does not constitute a qualifying exploration path — an undoable shared filter or structural change has already changed what others see before it is undone. Converting an exploratory modification to take effect for others MUST be an explicit action; when an exploration is abandoned, leaving a partially-effective result behind is forbidden. The existence of the exploration path itself MUST be discoverable at the shared object's editing entry point; existing only in documentation with no trace on the interface is forbidden.
Boundary conditionsThis rule does not require implementing branching and merging — for most products, a preview visible only to oneself satisfies the requirement; a suggestion mode satisfies it only when its content, activity notifications, and shared state are all kept from being exposed to others. It does not apply to objects that structurally cannot have a private intermediate state (such as a real-time vote result that is explicitly instantaneous and public); such objects are recorded as not applicable with the reason stated.
Design applicationChoose the path by the cost of the modification: changing one number is fine with a personal preview; changing a whole template or a workflow needs a copy. Put the entry point for the exploration path next to the editing entry point — burying it three levels into a menu is the same as not having it.
Verification examples
- User side: have a member try "see what it looks like without this column," and record what method they actually used and whether it affected others.
- Implementation side: verify that an abandoned exploratory modification leaves no partial result behind; check the discoverability of the exploration path's entry point.
CounterexamplesUnder-delivery — wanting to see whether a different grouping looks better requires directly changing the shared board, and after changing it back because it didn't look good, the whole team's interface jumped twice; over-delivery — every modification must first create a branch and then open a merge request, so fixing a single typo takes three steps.
C6-3A personal view does not change what others seeMUST
In one sentence: If I collapse a column, that should not collapse everyone else's screen too.
Applies tomulti-user products that provide presentation controls such as filtering, sorting, grouping, collapsing, zoom, or display density.
RuleA member's adjustment to presentation state MUST default to affecting only themself (see collab.private.view.ownership). Changing shared presentation state MUST be an explicit action distinguishable from a personal adjustment, and MUST state its scope of effect before execution per C4-4. When shared presentation state is changed, other members currently viewing that view MUST be able to perceive that a change has occurred; letting someone else's interface change with no indication at all is forbidden. When a product provides both a personal view and a shared view, the view currently in use MUST remain continuously visible (see the design application in C4-4).
Boundary conditionsThis rule does not forbid providing a shared view — a shared view is necessary in most team tools; what it specifies is default ownership and the explicitness of switching. A presentation change caused by the underlying data itself changing (a new record was added) is not the presentation-state change this rule addresses.
Design applicationMake "shared view" a mode that must be actively entered, and make personal adjustment the default — a product built the other way around lets every mistaken operation spill over onto the whole team. Attach an author and a time to changes made to a shared view, so people know why the interface changed.
Verification examples
- User side: have one member adjust a filter condition, and check whether other members' interfaces change; if they do, check whether those members can tell why.
- Implementation side: check that the storage location (personal-level or shared-level) for each type of presentation state matches what is declared; verify that a shared-view change produces a perceivable presentation for online viewers.
CounterexamplesUnder-delivery — a member sets a filter to find one record, and most of the whole team's board gets filtered out at the same time, so others think data was lost; over-delivery — no shared view is provided at all, and everyone has to manually set their filter to match before every meeting.
C6-4The move between private and shared areas is explicit and cannot pretend to be recalledMUST
In one sentence: Recalling can delete the content, but it cannot delete "having already been seen."
Applies toproducts that provide the ability to recall, delete already-sent content, or move content from a shared area back to a private area.
RuleContent moving from a private state into a shared state is an explicit action (see C6-1); the reverse move — recall, deleting already-sent content, moving from a shared area back to a private area — MUST truthfully present the exposure that has already occurred (see collab.private.recall.disclosure). The product is forbidden from using wording such as "recalled" or "not yet read by the other party" to imply the content was never seen, unless that determination comes from a reliable basis with the limitations of that basis stated. After a recall, the product MUST state its boundary of effect: content already copied, exported, screenshotted, delivered via a notification digest, or received by an external system by others is outside the scope of the recall. Whether the recall action itself is visible to others (whether it leaves a trace such as "one message recalled") MUST be predefined and applied consistently, and must not be decided case by case at implementation time.
Boundary conditionsThis rule does not deny the value of a recall feature; what it constrains is that the description of the recall's effect does not create a false expectation. It does not require the product to track the content's propagation beyond its own boundary — quite the opposite: precisely because that cannot be done, truthful disclosure is required.
Design applicationChange the post-recall message from "recalled" to an explanatory sentence ("removed from the conversation; if the other party already received a notification, the content may have already been seen"). This one sentence costs little, and it prevents subsequent behavior based on a false expectation.
Verification examples
- User side: send a piece of content that triggers a push notification, then immediately recall it, and check whether the recipient's notification bar still retains the content, and whether the sender is told of this possibility.
- Implementation side: check that the actual scope of the recall's effect matches the wording used; verify that the handling of copies in notification digests, email delivery, and external integrations is stated.
CounterexamplesUnder-delivery — someone sends the wrong message and clicks recall, the interface shows "recalled," but the original text is actually still there in the recipient's phone push notification, and the sender has no idea; over-delivery — because recall is never complete, no recall feature is offered at all, and a mistakenly sent message can only stay there.
C6-5Private communication is not folded into the shared recordSHOULD
In one sentence: A private chat does not become public material just because it was exported, indexed, or summarized.
Applies toproducts that provide both private communication (direct messages, private comments, personal notes) and a shared record.
RuleThe content of private communication should not enter a broader visible scope through export, search, aggregation, summary generation, or cross-feature reference (see collab.private.channel.scope). Including unauthorized-to-share private content when generating a summary, report, or knowledge compilation facing the shared space is forbidden; when such a compilation is generated by an Agent or automation, its readable scope is equally bound by this rule. When private content is accessed due to compliance, audit, or statutory requirements, the basis and scope of that access should be recorded; turning this kind of access into something routinely obtainable through a product feature is forbidden. When private communication is moved into the shared space, it must be an explicit action by the initiator, made knowable to the original conversation partner.
Boundary conditionsThis rule does not forbid a user from quoting or forwarding their own private content themself — that is the user's own disposition right. It does not change an organization's compliance access performed under statutory or institutional requirements; it only requires that this kind of access not be turned into an everyday-available button.
Design applicationSet a hard read boundary for summary and digest-type features, and mark the scope of the data source at the point where the result is generated. Make "forward to shared space" an action that leaves a trace visible to the conversation partner.
Verification examples
- User side: carry on a direct-message discussion within a project, then trigger a project-summary generation, and check whether the direct-message content appears in the summary.
- Implementation side: audit the read scope of summary-type features and the search index; verify that private content is not included in shared export results.
CounterexamplesUnder-delivery — an automatic project weekly-summary feature writes a private chat between two members about a third person into the summary sent to the whole team; over-delivery — for the sake of isolation, a conclusion reached in a private discussion cannot be brought into a shared document by any means, and the user can only manually copy and paste it.
C6-6Reminders can be scoped down, and being mentioned does not expand accessMUST
In one sentence: One can receive fewer interruptions; being mentioned does not mean being granted access.
Applies tocollaboration products that provide mentions, subscriptions, thread notifications, email digests, or push.
Rule
- A member MUST be able to stop non-essential reminders by object or thread, and set a personal do-not-disturb period; when displaying deadlines and mute-resume times across time zones, the time zone MUST be queryable. Muting changes only the reminder — it cannot mark an already-assigned responsibility as handled or delete a pending item.
- A mention MUST resolve the recipient and the authorized scope before sending; automatically granting new content access to someone or a group merely because they were @-mentioned is forbidden. When an invitation is actually needed, the granted scope MUST be explicitly displayed and executed as an independent authorization action.
- A group mention MUST let the sender know the actual notification scope; when someone is not authorized to view the member list, the list must not be exposed to them. The conditions, subjects, frequency constraints, and records for emergency override of mute MUST be predefined; muting cannot be automatically overridden merely by repeated @-mentions.
- Necessary events such as permission changes and responsibility fallbacks MUST remain in a queryable location; pausing push notifications cannot drop the event, nor can it be treated as the recipient having become aware of it.
Related configuration: collab.private.attention.policy, collab.action.delivery.policy.
Boundary conditionsThis rule does not require every notification to be deletable; necessary events may be retained within the product, but external forced interruption must meet the declared emergency conditions.
Verification examplesAfter muting a thread, @-mention it repeatedly and check that ordinary push does not resume; when someone with no access permission is mentioned, they do not receive a content excerpt, nor are they automatically added to the shared scope.
CounterexamplesUnder-delivery — clicking @ on an external colleague grants them the entire project. Over-delivery — after muting, even permission-tightening alerts and pending tasks stop being shown.
C6-7Participation restrictions have a scope and an exit pathMUST
In one sentence: Blocking, leaving, and de-authorization each have consequences, and a restriction must also have a way to be lifted.
Applies toproducts that provide shared discussion, directed interaction, or member-participation restrictions.
Rule
- The product MUST distinguish personal mute or block, restricting someone's participation, removing a person from a space, and revoking their access; the affected interactions and content MUST be stated before the operation, and using "block" to imply the shared object has become invisible to that person is forbidden.
- A member MUST have a path to stop unwanted directed interaction and seek help from a clearly designated responsible party; help-seeking material is disclosed only to the authorized handler and must not be broadcast by default to all members or to the person being reported.
- When an authorized party restricts speech, commenting, or joining, the scope of effect, the conditions for taking effect, the duration or review conditions, and the release path MUST be recorded. The restricted person MUST receive a status explanation that does not leak sensitive material, along with an available path for review.
- Leaving a space MUST state the subsequent handling of responsibility, content, and permissions; a personal block or a departure MUST NOT silently delete someone else's contribution, and a member leaving also does not mean their historical content is entirely withdrawn.
Related configuration: collab.private.participation.policy.
Boundary conditionsThis rule specifies participation control within the product; it does not specify which speech is a violation or how an organization should adjudicate it. An emergency restriction may be executed first, but this must not be used as an excuse to omit controlled recording and a review path.
Verification examplesAfter A blocks B, check that the two parties' shared-file permissions remain unchanged; after restricting commenting, test the time limit, review, and release; when leaving, check task handoff and private content.
CounterexamplesUnder-delivery — a block button leads people to mistakenly believe the other person can no longer see the shared board at all. Over-delivery — when facing repeated harassment, one is required to publicly disclose every detail before muting is allowed.
4. Terminology and definitions
This chapter defines the terms used within these guidelines to judge behavior and outcomes.
| Term | Definition | Key boundary |
|---|---|---|
| Shared object | A product object accessible or modifiable by two or more subjects: a document, canvas, task, board, space, conversation. | Whether it is shared is determined by its visible scope, not by its storage location. An object placed in a shared folder but visible to only one person is not a shared object. |
| Perceptual information | Information about other members that the system presents to one member: presence, location, ongoing operations, viewing records. | It is for collaboration, not for evaluation (C1-6). Its upper bound of granularity is determined by collaboration need, not by technical availability. |
| Presence | A subject's state of currently being reachable or currently on an object. | It is a time-bound determination, not a continuously true attribute. An account being present does not mean the person is present (C1-2). |
| Viewing record | A retrospective record of when a subject accessed an object. | A different category of information from presence, with its switch, audience, and retention period decided separately (C1-5). It is retrospective exposure; deleting it does not delete the content. |
| Visible scope | The complete set of subjects currently able to access a piece of content. | It is a property of the content, traveling with it; hiding it on the interface does not constitute visible scope. Link holders are a non-enumerable subject category (C2-3). |
| Concurrency strategy | The predefined adjudication method for when the same object is simultaneously modified by multiple people. | Must be consistent with actual behavior (C3-1). Convergence (all copies eventually consistent) is not the same as correct (the result being what a party wanted). |
| Auto-merge | The system combining changes from multiple parties into one result without human intervention. | Its applicable scope is defined by content semantics, not by technical feasibility (C3-3). The merged product must be identifiable and correctable. |
| Adjudicator | The subject who decides which side's content is adopted when a conflict cannot be handled automatically. | Not the same as whoever submitted last. Must have permission over and responsibility for the content, and possess a basis for judgment (C3-4). |
| Undo | A member's reversal of one of their own previous steps. | On a shared object it means "undo the step I made," not "revert the object's most recent change" (C4-1). A different thing from history recovery; they do not share an entry point. |
| Scope of effect | Whether an operation takes effect for the person themself, for specified members, or for everyone. | Must be knowable before execution (C4-4). The default ownership of a personal view versus a shared view falls under this term. |
| Responsible subject | Who is currently responsible for driving or maintaining an object. | Not the same as a participant, watcher, creator, or most recent editor. "No one responsible" is a legitimate value that must be queryable (C5-1). |
| Handoff | The process of responsibility transferring from one subject to another. | Comprises four independent dimensions: initiation, delivery, awareness evidence, and acceptance (C5-2). A one-sided assignment does not constitute a completed handoff. |
| Not yet finalized | Content that has been produced but not yet explicitly converted by its author into shared-visible. | Defaults to visible only to the author (C6-1). It is not "save failed," nor is it "pending review." |
| Exploratory modification | A modification made to judge whether a change is suitable, intended to be abandonable. | A path that does not immediately affect others must exist (C6-2). No partial result is left behind when abandoned. |
| Personal view state | The current value of presentation controls such as filtering, sorting, grouping, collapsing, zoom, or display density. | Belongs to the individual by default (C6-3). Changing shared presentation state is a separate action requiring explicit expression. |
4.1 Conformance determination
For every applicable rule, judge each independent obligation as "pass / fail / not applicable / unverified"; not applicable must state the capability and situational basis. A SHOULD-level deviation needs the reason, the alternative mechanism, and the corresponding verification stated. The number of people, sample size, and duration in the examples are test configurations, not universal performance thresholds.
Document review, mechanism verification, and user-comprehension verification each retain their own evidence and cannot substitute for one another. Over-privileged access, lost contribution, presenting unknown as success, or treating silence or no-reply as agreement — a failure in any applicable use case means a fail, not offset by an average score. After a change to audience, concurrency, save, or notification policy, re-verify the affected combined scenarios.
Appendix A: Fault-injection verification checklist
This checklist is for testing whether a clause actually takes effect; it adds no new obligation. Inject item by item and record the system's actual behavior; recording "not applicable" is an acceptable result; recording "not tested" is not.
A.1 Perception and visibility
| Injection | Expected behavior | Related rule |
|---|---|---|
| Observe a member's presentation to others after they power off or disconnect | Converts to unknown or offline within the validity period, not carrying forward a historical status | C1-1 |
| Log in with someone's account on a shared terminal | Presented as a device present, not a personal presence | C1-2 |
| List all activity fields visible to other members | Each one can be stated as avoiding a specific collaboration problem | C1-3 |
| A member enables the most restrictive visibility tier | Core collaboration features remain usable, with no functional penalty | C1-4 |
| Piece together an equivalent read conclusion from presence history and open count after disabling viewing records | Cannot reconstruct an equivalent conclusion | C1-5 |
| Search the product for a member-activity-level ranking | No leaderboard sorted by person for activity, edit count, or response speed exists | C1-6 |
| Ask for the exact visible scope of ten shared objects | An authorized person can resolve it to specific subject categories | C2-1 |
| Change a three-person shared document to link-editable | The original three learn of the post-change scope | C2-2 |
| Retry with a cached session and a direct resource address after revoking a link | Access is denied | C2-3 |
| Check search, notification digests, reference previews, and exports as an unauthorized member | No restricted content fragment leaks out; a partially visible spot discloses its partiality | C2-4 |
| Check child-level exceptions after modifying parent-level permissions | Takes effect per the declared stacking rule, with the source traceable | C2-5 |
| Open a link with no access permission | Get an actionable next step, or a not-disclosing-existence response per predefined policy | C2-6 |
A.2 Concurrency and conflict
| Injection | Expected behavior | Related rule |
|---|---|---|
| Two members modify the same object at the same time | Behavior matches the declared concurrency strategy, with no silent loss of input | C3-1 |
| One person edits the middle of a long document while another scrolls there and starts typing | A valid, presentation-cleared occupation fact is perceivable before typing; when unavailable, it is shown as unknown and input is still protected | C3-2 |
| Two people each modify different parts of the same sentence | Original contribution and diff preserved; a defined incompatible combination is handled per established adjudication, with no promise of universal semantic correctness | C3-3 |
| Create a conflict requiring manual adjudication | Adjudication appears at a subject with both authority and responsibility; the other party learns of the result | C3-4 |
| Another member tries to edit after the lock holder powers off | A release path exists; a saved draft is not cleared, the recovery boundary of offline input is truthfully stated, and an expired lock cannot submit | C3-5 |
| Reconnect after two hours of offline editing | Separately presents the state of others' changes and one's own changes, with no silent overwrite | C3-6 |
A.3 Operation and responsibility
| Injection | Expected behavior | Related rule |
|---|---|---|
| A edits, then B edits, then A presses undo | What gets undone is A's edit | C4-1 |
| A undoes one step while B has a subsequent modification built on it | The scope of impact is stated before execution; B can retrieve the rolled-back content | C4-2 |
| An administrator performs a modification on behalf of a member | The author presentation is identifiable as performed-on-behalf-of | C4-3 |
| Automation or an Agent bulk-modifies records | The author is identifiable as not the person's own operation | C4-3 |
| Adjust a filter on a board | The scope of effect is knowable before execution; it defaults to the personal view | C4-4, C6-3 |
| Delete a document with comments from multiple people and external references | The scope of impact is stated; someone else's contribution has a retention or export path; referencing parties learn of the invalidation | C4-5 |
| Bulk-assign thirty cards to the same person | Reminders are aggregated and still allow judging which need attention | C4-6 |
| Ask twenty random in-progress tasks who the current owner is | Each resolves to a subject, or explicitly resolves to no one responsible | C5-1 |
| Assign a task to a member on leave that day | Initiation, delivery, awareness evidence, and acceptance are expressed separately; a long-unknown state has a fallback | C5-2 |
| Deactivate an account holding a task, an exclusive lock, and a private draft | All three categories have a clear destination with a queryable disposition; private content is not merged into the shared space by default | C5-3, C3-5 |
| View history after a responsibility handoff | Prior changes still show the original author | C5-4 |
| Invite an external guest and ask internal members "who can see this" | External participation is explained per the SHOULD-level rule; a temporary permission has an expiry point, and a long-term grant has a review | C5-5 |
A.4 Private room
| Injection | Expected behavior | Related rule |
|---|---|---|
| Close the page after typing half a comment | Content is not visible to others, and is still there on reopening | C6-1 |
| Check whether not-yet-finalized content enters search, notifications, and exports | None of them contain it | C6-1, C2-4 |
| Try "see what it looks like without this column" | A path exists that does not immediately affect others, and its entry point is discoverable | C6-2 |
| Abandon an exploratory modification partway through | No partially-effective result is left behind | C6-2 |
| A member adjusts filtering, sorting, or collapsing | Does not change what others see by default; if a shared view is changed, others can perceive it | C6-3 |
| Recall content immediately after triggering a push notification | Truthfully states that the pushed copy may already have been seen | C6-4 |
| Trigger a project-summary generation after a direct-message discussion | Private content does not appear in the shared summary | C6-5 |
A.5 Classification test
Used to test whether the split in Chapter 1 holds: take 10 to 15 specific requirements (which may come from this document's clauses or from real review comments), and have at least three reviewers who were not involved in writing it independently judge which principle each belongs to. If ownership disagreement concentrates between two particular principles, it shows the regulatory objects of those two principles have not been properly separated — in that case, the principles should be adjusted, not given an intermediate layer or a mapping explanation. The two spots already known to need priority testing are flagged explicitly in Chapter 1 (C1 and C2, C4 and C6).
Appendix B: Evidentiary boundaries and source types
B.1 The basis for normative terms
The sole basis for marking something MUST is: without it, some promise made to the user would fail in a foreseeable situation. The following three categories of evidence provide different kinds of support; they are not three independent sources of mandatory force — an implementation reference alone is not sufficient to decide a MUST marking:
| Source | Description | Examples |
|---|---|---|
| Evidenced failure | Existing research or public records show that this promise would fail | C3-3 (convergence is not semantic correctness), C4-1 (a shared undo stack causing someone else's work to be rolled back), C1-5 (the privacy impact of a perceptual feature) |
| Derived from the promise | Given that the product makes this promise, the promise necessarily fails without this mechanism | C2-4 ("cannot be seen" must actually mean cannot be retrieved), C5-2 (assignment is not acceptance), C6-4 (recall does not mean not seen) |
| Existing problem models from collaboration research | Failure patterns already characterized by domain research, used to confirm that the problem exists, not to prove any particular solution is universal | C1-3, C1-6 (the continuum between perception and surveillance), C5-1 (responsibility falling through the cracks), C6-2 (the cost of exploration) |
The five rules marked SHOULD (C2-6, C3-6, C4-6, C5-5, C6-5) are all tradeoff questions rather than baseline questions: a deviation may have legitimate reasons, but it must be recorded and subjected to the same verification. Among them, both C2-6's two response strategies and C4-6's aggregation granularity depend on the product's specific risk judgment, and this document does not give a uniform value.
B.2 The three thinnest points of evidence in this document
Listed explicitly, not masked by normative-sounding language:
- C3-3's "auto-mergeable scope" lacks a cross-product general criterion. There is currently no citable, generally recognized list of which semantic combinations can be safely auto-merged; this document requires the product to declare business risk units, incompatible combinations, and an out-of-scope path, and to verify that original contributions are preserved; the combinations given in the text are a starting checklist, not an exhaustive list. This is the rule in this document most likely to be satisfied only formally without substance.
- The granularity boundary of C1-3 and C1-6 depends on situational judgment. There is no universal dividing line between "enough for collaboration" and "enough to evaluate someone" that can be written into a clause; what this document gives is a criterion (whether it can be stated what specific collaboration problem it avoids, whether its use flows toward evaluating a person), not a field list. The acceptable range varies greatly across organizational cultures.
- The implementation cost of C4-1 has not been assessed by this document. Maintaining a per-member undo stack and handling cross-member dependencies varies greatly in implementation difficulty across different data models; this document specifies only the nature of the behavior and has not assessed under what architecture the cost of this requirement might rise high enough to need a separate boundary condition. When a dependency cannot be safely handled, the undo may be declined with an alternative path stated; this cannot be used to forbid all undo that does not affect others.
B.3 What this document does not do
It does not give a synchronization algorithm (it does not prescribe operational transformation, conflict-free replicated data types, or locking as the required choice), does not give a permission model (it does not prescribe role-based, attribute-based, or an access control list), does not give an organizational structure, does not give retention-period values, and does not give an upper limit on conflict-prompt frequency. These are decisions for the product and the organization; this document only specifies that these decisions must be made, must be testable, and which values are not permitted.
B.4 Sources
The complete source cross-reference, verification status, and retrieval record are in reference.md. A clause in this document does not hold merely because some product has done it this way; a product's practice is evidence that "this kind of mechanism is feasible in a real product," not a basis for "it should be required this way."
Appendix C: Combined scenarios and acceptance records
This appendix consists of application examples; it adds no new obligation. Each verification checks the initiator, the recipient, any affected third party, and the actual data result together; seeing only a success message is not enough to determine a pass.
| Scenario | Trigger and fault | Expectation and observed evidence | Rule |
|---|---|---|---|
| A guest is brought into a three-person document | B edits offline, A expands the audience, C turns off push | The record and the notification task are generated at the same time; online contributors see the new scope before continuing to contribute, B checks it first on reconnecting, C can still query within the object | C2-2, C3-6, C6-6 |
| A private draft is involved in review | B publishes a suggestion after modifying it in a private preview, A resolves the thread | The draft does not enter notifications or summaries; the audience is clear after publishing; resolving does not mean approving, and the objection remains traceable | C6-1, C6-2, C5-6 |
| Concurrent reassignment | A and B change the owner at the same time, and B's stale confirmation arrives later | Only the currently valid request can change responsibility; the stale confirmation does not accept the new task, and an unacknowledged state has a clear fallback | C3-1, C5-2 |
| Interleaved editing and undo | B types into a column A just added, then A undoes the added column | The cascaded content and author are made clear, B's retrievable contribution is preserved, and other steps are not mistakenly undone | C4-1, C4-2 |
| Departure and an in-flight summary | The handoff fails after de-authorization, and an external summary is still queued | De-authorization executes first; the restricted custodial state and responsible party are queryable; delivery re-checks authorization, and private content is not leaked | C2-7, C5-3 |
| Forced unlock and reconnection | B is offline and the lock has already been force-released, then B submits with the stale credential | The stale-lock write is not accepted; saved input is recoverable per the declared boundary, without overwriting A's work | C3-5, C3-6 |
| Accessible editing | Remote content keeps being inserted while a user reviews comments by keyboard | Comments and anchors remain locatable, focus is not snatched away, activity announcements can be reduced while conflicts are still discoverable | C1-7 |
| Partial success and a resend | A receipt is lost after a bulk assignment partially takes effect | Checked item by item; a succeeded item is not repeated; muting still applies; an unknown is not written as a failure | C4-7, C6-6 |
| Blocking and permissions | Continuing to view a shared object after blocking a repeat mentioner | Clearly states only the interaction is restricted; a help request is not broadcast, the restriction has a release path, and it does not masquerade as de-authorization | C6-7, C2-4 |
| An effective decision becomes invalid | The key scope or recipients change after approval | The historical decision is preserved but current execution conditions are re-verified; a non-response does not count as approval | C5-6 |
Minimum acceptance record: the task and object, applicable rules, roles and permissions, the configuration's actual values and source, the operation sequence, the injected fault, each party's visible state, backend or local evidence of the result, the pass conclusion, any unverified items, and the responsible party for handling them. User-side observation should also record whether the audience, result, and next step were understood; a user's lucky guess cannot mask a mechanism failure.
Implementation acceptance scenarios
The following scenarios convert existing clauses into reviewable acceptance inputs; they do not set a separate universal performance threshold. Select according to the product's applicable capabilities, and supplement with real devices, users, input sequences, and evidence; record the reason when not applicable, and something not executed must not be recorded as passed.
| Clause | Test input and anomaly | Expected behavior and failure criterion |
|---|---|---|
| C1-1 | The connection has moved to a new generation, and an old heartbeat arrives afterward. | The stale packet does not make the original subject show online, and does not extend current eligibility. |
| C4-1 | A and B edit the same paragraph interleaved, then A undoes one step. | Undoes A's related operation, without silently overwriting B's contribution. |
| C2-7 | During de-authorization, an old browser is still queuing a shared submission. | The execution side adjudicates by current permission; interface hiding is not used as a substitute for de-authorization. |
Each scenario separately checks the configuration's effective value, the execution record, and a result the user can understand. Retain the version, target, event timing, scope of failure, and recovery result; an unknown external result is not filled in as either success or failure.
Usage notes
This dictionary records design decisions for collaborative behavior: perception, audience, concurrency, operations, responsibility, records, and private participation. It is not a visual style sheet, and it does not store operational facts such as whether a given operation succeeded or who is currently online.
Used together with the Design Guidelines. First clarify the task, roles, audience, and the point of formal effect, then choose the applicable fields; each configuration entry states who decides, why that value was chosen, when it takes effect, and which mechanism it depends on. Filling it in does not mean the behavior has actually been implemented.
Seven-category overview
| Category | Prefix | Required | Optional | Total | What it governs |
|---|---|---|---|---|---|
| Presence and perception | collab.presence | 6 | 2 | 8 | Who information about others is shown to, at what granularity, and whether the person being seen can retract it |
| Visibility | collab.visibility | 2 | 6 | 8 | Who this content is visible to, who is told when the scope changes, and how partial visibility is expressed |
| Concurrency | collab.concurrency | 1 | 6 | 7 | Whose change it counts as when two edit at once, who adjudicates, how long a lock lasts, and to what point convergence happens |
| Scope of operation effect | collab.action | 2 | 6 | 8 | Whose step an undo undoes, who this operation affects, and how destructive operations are tiered |
| Ownership of responsibility | collab.ownership | 2 | 6 | 8 | Who owns this, how it is handed off, and who it belongs to when a person leaves |
| Records | collab.record | 3 | 2 | 5 | What is recorded, for how long, how the author is marked, and whether it can be exported |
| Private room | collab.private | 2 | 6 | 8 | Who sees not-yet-finalized work by default, where to try things out, and when something converts to shared |
Total 52 items: 18 required, 34 optional.
Required and optional
| Level | Meaning | How to configure |
|---|---|---|
| Required | A foundational decision that must be made explicit whenever the corresponding capability exists; the same field is still judged by its own applicability condition — for example, a heartbeat validity period does not need configuring when presence is not presented at all. | May inherit a product preset, or express a restriction with a legitimate off value, an empty set, or the most conservative value; the user is not required to fill in every item individually. A fully single-user product with no shared object can simply record the entire dictionary as "not applicable." |
| Optional | A parameter adopted only for a specific capability or a differentiated need. | Left unconfigured when there is no corresponding capability; once the capability is enabled, its necessary dependencies must have an explicit value or an executable inheritance rule (see Section 8). |
The boundaries of perceptual information, visible scope, concurrency adjudication, scope of effect, responsibility, and private state
| Object | What it governs | Key boundary |
|---|---|---|
| Perceptual information | Information about other members that the system presents to one member: whether present, what they are viewing, what they changed, when they last viewed something. | It is for collaboration, not for evaluation. The upper bound of granularity is determined by collaboration need, not by technical availability — being able to collect it does not mean being able to present it, and being able to present it does not mean being able to retain it. |
| Visible scope | The complete set of subjects currently able to access a piece of content. | It is a property of the content, traveling with it. Hiding, graying out, or filtering on the interface does not constitute visible scope. Link holders are a non-enumerable subject category; once they enter the scope, "who can see it" can no longer be answered by enumeration. |
| Concurrency adjudication | The predefined handling method for when the same object is modified simultaneously by multiple people. | Convergence is not the same as correctness: all copies eventually being consistent is a technical property, while the result being what a party wanted is a semantic property; the two are expressed by different fields and do not imply each other. |
| Scope of effect | Whether an operation takes effect for the person themself, for specified members, or for everyone. | Must be resolvable before execution. The scope of an undo is "this person's previous step," not "the object's most recent change" — this is the single easiest default in this domain to get implemented backwards. |
| Responsible subject | Who is currently responsible for driving or maintaining an object. | Not the same as a participant, watcher, creator, or most recent editor. "No one responsible" is a legitimate value that must be expressible and queryable, not a null value. |
| Private state | State within a shared workspace that belongs to the individual: not-yet-finalized work, an exploratory modification, a personal view, private communication. | Belongs to the individual by default; converting to shared must be an explicit action. It is not "pending review," nor is it "save failed" — the product must not implement private state as an intermediate stage of shared state. |
Field-reading conventions
- The token field in each section's table is written as a relative field name (such as
modeorpurpose.scope); the full name iscollab.<category>.<relative field name>. - Enumerated values are separated by "/". This dictionary sets no global rule such as "order from convergent to expansive, and take the first tier when unconfigured" — exclusive locking, last-write-preserved, semantic merge, and manual adjudication do not form a monotonic risk sequence, and taking the first tier would silently change the established semantics of a similar object when configuration is missing. The last column of each row gives the applicable condition, i.e.
required_when; a field with no default value listed elsewhere is uniformly "no default — when applicable, it must be explicitly configured or resolve an inherited value." Only the following defaults explicitly take effect:private.draft.defaultdefaults to visible only to the author; the presentation control underprivate.view.ownershipdefaults to personal; the view control underaction.effect.scopedefaults to the person themself; no other configuration may depend on the ordering of an enumeration. - The four resolution results are not equivalent to one another: applicable but a required configuration is missing → the configuration is invalid, disabling the affected new capability and flagging it for repair, rather than silently passing through under any tier; no corresponding capability → not applicable (with the basis for the judgment recorded); an explicit off value → capability off; the operational state has not been obtained → the fact is unknown, retained as unknown and not converted into any of the above.
- A duration is always written as "a non-negative or positive numeric value + an explicit unit," with each item further stating: the triggering event for the count, whether and how it renews, whether expiry comparison is strictly-greater-than or greater-than-or-equal, the clock source, and the effect on existing instances when the configuration is modified. A period is a policy; a given instance's actual holder, effective expiry point, valid credential, and "whether it is still valid right now" are operational facts — they are not stored by this dictionary, nor may an instance's continued existence or release be inferred merely from the period.
- A "reference" must point to a registered product policy entry, resolving to an identifier, body text, responsible party, and effective scope. When a reference is missing, circular, or has a conflicting applicable scope, that configuration is invalid — the capability depending on it is disabled and flagged for repair, and it must not be silently treated as an empty value or the most permissive tier.
- This dictionary gives no concrete numeric values: durations, counts, ratios, and frequency caps are uniformly written as "defined by the product, with the basis recorded." Object volume, member scale, and organizational culture vary enormously across collaboration products; this dictionary has found no universal value directly citable across products, and what it requires is that these values be explicitly defined, justified, and reviewable.
- A parenthetical annotation (corresponding to C3-2) refers back to a rule number in the Design Guidelines, indicating that this field is the decision that rule requires to be made explicit; a single field may refer back to more than one rule.
Decisions, facts, and presentation
| Layer | Example | What it cannot substitute for |
|---|---|---|
| Behavior configuration | Whether zone-level activity indicators are allowed, a lock's time limit, a handoff model requiring acceptance | Does not indicate that someone is actually editing, that a given lock is valid, or that someone has actually accepted a handoff |
| Operational fact | Subject, object snapshot, operation or handoff-request identifier, observation time, validity, and receipt | Cannot be inferred from a default value, an avatar color, or a stale receipt |
| Interface presentation | Unknown, pending verification, saved on this device only, handoff pending acceptance | Must be faithful to the facts, and provide names and action entries suited to assistive technology |
When designing each component, answer: what evidence is needed, what does the user's action change, and how is it known that it has taken effect. Collaborators, diffs, comment anchors, and status must not be expressed by color alone; announcements may be aggregated, but critical states must still be queryable.
The shared structure and decision authority of a configuration
Every field actually adopted uses the following record structure; this is a product-implementation contract template, and it declares no compatibility with any token interchange format.
key: the full collab.* field name
value: a legal value from the table, or a resolvable policy reference
source: product preset / organizational restriction / personal preference / this operation's choice
scope: object category, operation category, applicable member range
reason: task basis, data basis, or an explicit design tradeoff
owner: the responsible party who decides and maintains this configuration
effective_at: the triggering event or a time with time zone
existing_instances: how this takes effect for an in-progress lock, handoff, queue, or record
evidence: the mechanism and interface verification entry point
An organizational restriction can only constrain behavior within its own authority, and a personal preference cannot expand access; when multiple hard restrictions apply, the commonly permitted range is used. Personal privacy reduction, do-not-disturb, and exiting a follow session cannot be overridden by the operator's preference. The read/write inheritance model is defined by visibility.inheritance.trace, and an override at the configuration layer cannot bypass actual authorization. When an administrator setting conflicts with a product preset, or a reference cannot be resolved, block the affected new action and provide a repair path; do not delay a necessary de-authorization.
Durations use an explicit unit and clock. It is recommended to judge expiry with now >= expires_at against an authoritative time; if another comparison method is used, the rationale must be stated and the exactly-at-expiry case verified. A client-side countdown is display only and cannot determine whether a lock or permission remains valid.
1. Presence and perception: who information about others is shown to, at what granularity, and whether the person being seen can retract it
Prefix: collab.presence
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | Validity period of the presence determination | freshness.ttl | A non-negative duration (explicit unit) + triggering event (the receipt time of the most recent valid heartbeat) + renewal rule + whether expiry comparison is "strictly greater than" or "greater than or equal to" + clock source. Measured and recorded by the product according to its own heartbeat and network characteristics. After expiry, status converts to "unknown" or "offline"; carrying forward a historical status to keep presenting as online is forbidden. Being merely viewed by someone else does not renew it. required_when: identity.mode is not "presence not presented"; record "not applicable" when presence is not presented. | Determines how long "the avatar is lit" can stay lit; presence is a time-bound determination, not a continuously true attribute (corresponds to C1-1). |
| Required | The standard for the presence subject | identity.mode | Enumeration: presence not presented / presented as session-or-device presence / presented as personal presence. The third tier requires the product to be able to state the basis for its identity confidence; a shared terminal, a long-suspended session, or an automated session must not count toward the third tier. | A product that presents presence must make this explicit; it delimits "whether the person behind that avatar is really that person"; an account being present does not mean the person is present (corresponds to C1-2). |
| Required | Upper bound of perceptual granularity | awareness.granularity | Enumeration: not presented / present-or-not / which object / which region within the object / the ongoing editing activity. Each tier increase must be able to state which specific collaboration problem it avoids. Keystroke rhythm, dwell duration, window switching, and idle duration do not belong to any tier of this enumeration. | Must be configured whenever another's activity is presented; determines how fine-grained information about others is; this is one of the interfaces between this category and visual tokens (corresponds to C1-3, C1-6). |
| Required | The purpose and consumers of perceptual information | purpose.scope | A set; each item includes a purpose description and an explicit downstream consumer. A module not on the list must not read perceptual information. Inclusion in performance evaluation, an activity-level ranking, promotion and review, work-hour accounting, or disciplinary-action evidence is forbidden (corresponds to C1-6). | Must be configured whenever another's collaborative activity is presented or retained; binds where perceptual information flows; a change of purpose must be redeclared, not self-connected by a new module (corresponds to C1-3, C1-6). |
| Required | Visibility control for the perceived party | visibility.self | A set of enumerated tiers, including at least one tier that presents no real-time presence or location to other members. Adopting the most-restrictive tier must not cause core collaboration features to become unavailable, must not produce a functional penalty (such as being excluded from collaboration prompts), and must not be presented as an anomalous state. | Must be configured whenever presence and location are presented to others; lets the person being seen retract it; this is the mechanism carrier for C1-4, not an add-on setting (corresponds to C1-4). |
| Required | Queryability of one's own exposure surface | subject.view | Reference: the entry point and its coverage for a member to query "which of my activity information is being presented to whom." The coverage must match the actual presentation; any uncovered field must be listed. | Must be configured whenever activity information is presented to others; lets the exposure surface be ascertained by the person themself; without this field, the tiers of visibility.self cannot be meaningfully chosen (corresponds to C1-4). |
| Optional | Viewing-record mode | seen.mode | Enumeration: not recorded / recorded but visible only to the person themself / recorded and visible to a specified scope. Any recording tier must declare its audience and retention period, and must not share a single switch with real-time presence. Once turned off, an equivalent read conclusion must not be pieced together from presence history, open count, or notification receipts. | Configured when a "who has viewed" capability is provided; being online is exposure in the moment, having viewed is retrospective exposure, and the two are decided separately (corresponds to C1-5). |
| Optional | Accessible presentation of collaboration changes | presentation | Presentation-policy reference: non-color identification for members and diffs, keyboard navigation for comments/diffs, focus and selection protection, the scope of activity announcements, and an active-query entry point. Following requires the person themself to initiate it, be continuously marked, and be exitable. Reducing announcements must not turn off conflict protection. | Must be configured whenever any collaboration change is presented; corresponds to C1-7. |
Boundaries: the validity period determines when presence information goes stale, granularity determines how fine it is, purpose determines where it flows, and visibility control determines whether the person being seen has any recourse. The four tighten independently of one another; loosening any one does not loosen the other three. The existence of a collection capability does not create eligibility for presentation, the existence of presentation does not create eligibility for retention, and the existence of retention does not create eligibility for use in evaluation.
2. Visibility: who this content is visible to, who is told when the scope changes, and how partial visibility is expressed
Prefix: collab.visibility
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | How visible scope is expressed | audience | A set: named subjects, groups, organization-wide, link holders, public. Each item must be resolvable by an authorized person to a specific subject or an explicit subject category; "already shared" does not constitute a legal value. Both the link-holders and public entries must be marked as non-enumerable categories. | Must be configured whenever shared access is provided; gives "who can see this thing" an answer; visible scope is a property of the content, not an interface state (corresponds to C2-1). |
| Required | Notification policy for scope changes | change.notice | Reference: the notified parties, notification content, and timing for expansion and contraction of scope. The change record and the notification task are generated at the moment permission takes effect; on expansion, event generation is no later than when the new subject gains access, and the notified parties cover the existing members; it states the post-change scope, not merely "permissions have been updated." The presentation time and the event time are recorded separately: an online, actively contributing member sees it before continuing to input; an offline member sees the new scope first on next entering the object; if deferred notification is chosen, the policy must be recorded. What this field requires is a receipt of interface delivery or of new writes being stopped — it does not promise proof that anyone has actually read it. Emergency de-authorization may execute first and notify afterward. On contraction, an online interface must not continue to present a submittable state; an offline interface states that permission has not been verified, and reconnection refuses submission on cached authorization. | Must be configured whenever the audience can be changed; lets those inside the room know the door has been opened; this is the mechanism carrier for C2-2 (corresponds to C2-2, C1-4). |
| Optional | Link-sharing mode | link.mode | Enumeration: no link sharing provided / login required and must be within scope / login required with no scope limit / any holder. From the third tier onward, its forwardability and non-enumerable audience must be stated at the point of creation; revocation must be provided, with the validity period and any additional access restriction declared; login and a password do not substitute for revocation. State the limitation that revocation does not reach a copy that has already left the product's boundary. | Configured when link sharing is provided; this is the most commonly underestimated expansion path for visible scope (corresponds to C2-3). |
| Optional | Marking of partial visibility | partial.disclosure | Enumeration: mark that filtered content exists / mark the count. required_when: a permission-filtered list, history, or search result exists; record "not applicable" when no filtered view exists — "no marking" is not a legal value. When the existence of the object itself is sensitive, use the stable statement "showing only the scope you are authorized to access" — this statement is worded identically whether or not hidden items exist, so that whether hidden items exist and their count cannot be inferred from any difference. Criterion: when what a member sees is a filtered list, a truncated history, or a view with items hidden, this fact must be knowable, otherwise they will mistake the incomplete for the complete and decide accordingly. The marking itself must not leak the hidden content. | Configured when a permission-filtered list, history, or search result exists (corresponds to C2-4). |
| Optional | Traceability of inheritance and exceptions | inheritance.trace | Reference: the hierarchical inheritance rule, the exception-stacking order, and the value principle on conflict; must be able to answer, for a given subject, "why can they see this one." The stacking rule must be predeclared, not left to be decided by chance implementation order. | Configured when a hierarchical structure such as folders, spaces, or groups exists (corresponds to C2-5). |
| Optional | Response policy for unauthorized access | request.mode | Enumeration: not-disclosing-existence by object category / disclose no-access and give a request entry point / disclose no-access and give a contactable authorizing party. No default tier — required_when: an externally reachable access entry point exists; the value is chosen by the actual risk of the object category, with the basis recorded. "Not disclosing existence" applies only to an object category whose existence itself is sensitive information, and must not be used as a uniform value for all ordinary objects (see the prohibition in C2-6 on using ambiguity to mask an ordinary case). Must be consistent within the same object category, not decided case by case. The request entry point must pre-fill the object identifier, so the recipient does not have to ask back which one is meant. | Configured when an externally reachable access entry point exists; the choice of policy depends on the product's specific risk judgment, and this dictionary gives no uniform value (corresponds to C2-6). |
| Optional | Review of visible scope | audience.review | Reference: the review cycle, review scope, and responsible party; must cover at least link sharing, external subjects, and long-unaccessed grants. The review result must be queryable. | Configured when a long-lived shared object exists; without this field, a long-term grant lacks an active review path (corresponds to C2-1, C5-5). |
| Optional | Effective timing and in-flight handling of de-authorization | revocation.policy | Policy reference: the execution boundary, how a stale session and long-lived connection are invalidated, re-authorization of pending content, protection of offline input, result verification, and failure-responsible party; distinguishes acceptance from actual taking effect. Declares which cached and external copies cannot be recalled, without treating a timeout as success. | Must be configured whenever permission can be tightened at runtime; corresponds to C2-7, C5-3. |
Boundaries: visible scope is a property of the content; hiding on the interface is presentation. The division of labor between the two is not interchangeable: the scope declared by audience must be enforced at the data and interface layer, and hiding, graying out, or filtering on the interface serves only as presentation, not as the sole means of enforcement. Expansion and contraction of scope are two categories of event with separate notified parties; they do not share one policy.
3. Concurrency: whose change it counts as when two edit at once, who adjudicates, how long a lock lasts, and to what point convergence happens
Prefix: collab.concurrency
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | Concurrency strategy | policy | Policy reference: resolves, by object type and operation category, to one primary strategy tier (exclusive locking / first-submit-wins with the rejected input preserved / last-write-wins with the overwritten content preserved and disclosed / semantic auto-merge / preserving both sides' input for adjudication), with an exception path explicitly definable. There is no legal value of "last-write silently overwrites with nothing preserved." No default tier — required_when: the product has any object that can be modified by two people at the same time. The chosen value must match actual behavior and be knowable before a member begins modifying it. When a dependency is missing, temporarily falling back to a different algorithm tier is forbidden: the concurrency capability for that object class is disabled and marked configuration-invalid, and the semantics of similar objects must not silently change for lack of a parameter. | Makes clear what happens when two people edit at once; this is a design decision, not an incidental outcome of implementation (corresponds to C3-1). |
| Optional | Indicator of who is currently editing | editing.indicator | A conditional presentation policy: once an occupation fact has been obtained that is valid and cleared for presentation, present it at the chosen granularity (object-level / region-level) before the member begins typing; it must also declare how to describe an unavailable state (unknown, not displayable, and counterparty unreachable are distinguished internally, with a neutral form used externally that does not expose the privacy choice) and the editing-protection path for that situation. When unknown or not permitted to display, presenting it as "no one editing" is forbidden. Externally, the reason for hiding it is not broken out, to avoid exposing the privacy choice. The information content of the indicator is bounded by presence.awareness.granularity, taking whichever of the two is more restrictive; an anonymized presentation must be assessed for identity exposure inferable in a small space. When real-time indicators are not provided, the reason for this being applicable is recorded; the responsibility for protecting input under privacy restrictions still rests with policy. | Configured when real-time concurrent editing is provided; notifying of a conflict after the fact cannot substitute for a prior indicator (corresponds to C3-2, C1-3). |
| Optional | Applicable scope of auto-merge | merge.scope | Reference: the business risk unit and detectable incompatible combinations defined by content semantics, a list of change combinations that can be auto-merged, and the handling path for anything outside the list; must include the object type, detection basis, point of formal effect, and verification use cases. Concurrent modification of the same atomic value, a delete combined with an edit that depends on that content, and a defined group of related fields must not become the authoritative result without an established adjudication. When free text cannot reliably determine semantic incompatibility, each party's original contribution must be preserved, the merge diff made discoverable, and a proportionate check performed before formal release or submission according to use; configuring it as "correctness is automatically guaranteed for all semantics" is forbidden. A merged product must be identifiable as a merge result and be correctable. "The result was not written in its entirety by any single party" is not by itself a criterion of illegitimacy. | Must be configured when policy includes auto-merge; merging without conflict is not the same as merging correctly (corresponds to C3-3). |
| Optional | Resolution rule for the adjudicator | arbiter | Reference: the resolution rule and fallback path for the adjudicator when a conflict needs manual adjudication. The adjudicator must have permission over and responsibility for the content. Assigning someone as adjudicator merely because they are the last submitter is forbidden; it is a legitimate result if, resolved independently by permission and responsibility, they happen to be the last submitter (corresponds to the responsible-subject situation in C3-4). The minimum set of adjudication basis (each side's content, author, time) and how the other party learns of it must be declared. | Configured when a conflict requiring manual adjudication may occur (corresponds to C3-4, C5-1). |
| Optional | Holding and time limit of an exclusive lock | lock.ttl | A positive duration (explicit unit) + triggering event (the moment the lock is granted) + refresh method and whether refresh resets the count + expiry comparison + clock source, measured by the product according to its typical editing duration with the basis recorded; must also declare the resolvability of the holder, expiry behavior, and a forced-release path. This field is a time-limit policy: a given lock's holder, effective expiry point, valid credential, and whether it is currently still valid are operational facts to be separately queried — the lock's continued existence or release must not be inferred merely from the time limit. The effect of a configuration change on existing locks must be declared. A forced release does not delete an already-persisted draft, nor actively clear local input; the save location, retrieval conditions, and permission boundary must be declared. Input unique to an offline device is not claimed as already backed up on the server; a reconnect submission must verify the current lock credential. | Must be configured when policy includes exclusive locking; if the person who locked it has gone home, the file must not stay locked forever (corresponds to C3-5). |
| Optional | Expression of convergence state | convergence.presentation | Presentation-contract reference (may be carried by an existing product contract), must cover four dimensions: inbound baseline (up to which snapshot what this person sees already includes others' changes), outbound persistence (saved locally), server acceptance, and provable degree of distribution to the target scope. Each dimension must have "unknown" and "failed" semantics; no dimension may substitute for the others — this person's write having been accepted does not prove others' concurrent or earlier changes have arrived inbound. A counterparty's receipt can only prove that client received it — it cannot be stated as "everyone has seen it"; actual viewing evidence must comply with presence.seen.mode. The object snapshot, update time, receipts, and target member set of a given sync are operational facts, not written by this field. | Configured when network latency or offline editing exists; "what I see is the latest" and "what I changed, others can see" are two different things (corresponds to C3-6). |
| Optional | Handling window for offline editing | offline.window | A positive duration (explicit unit) + triggering event (the moment of the last successful sync) + expiry comparison + handling method after expiry, measured by the product according to its usage context with the basis recorded. A change after the window expires is handled per the path declared by policy; it must not be silently discarded, nor silently overwrite others' changes made during that window. The behavioral difference inside versus outside the window must be knowable when going offline begins. | Configured when offline or weak-network editing is supported; the longer the offline duration, the higher the probability of meeting others' changes on return (corresponds to C3-6, C3-1). |
Boundaries: convergence.presentation expresses a technical property (whether all copies are consistent); merge.scope and arbiter express a semantic property (whether the result is what a party wanted). Convergence does not imply correctness; the two are carried by different fields, and satisfying one does not exempt the other. This dictionary sets no upper limit on conflict-prompt frequency: treating any two people who have touched the same content one after another as a conflict has the same effect as silently discarding input — either way, people stop looking at the prompts.
4. Scope of operation effect: whose step an undo undoes, who this operation affects, and how destructive operations are tiered
Prefix: collab.action
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | Scope of undo | undo.scope | Enumeration: undo capability not provided (a legal value when the product provides no undo on a shared object) / undoes this person's previous step within the declared context / undoes a specified historical step of this person's within the declared context. There is no legal value of "reverting the object's global most-recent change." For the latter two tiers, the boundary of the undo context must also be declared: whether multiple tabs of the same member, an operation performed on someone's behalf, and a subsequent Agent rewrite each count. This dictionary does not prescribe an implementation structure — a per-member isolated history, filtering by operation source, or an equivalent mechanism are all acceptable. When this person has no undoable operation, behavior must be "no effect, stated"; it must not fall back to undoing someone else's change. History recovery is a separate capability, not sharing the entry point or shortcut key. | Whenever shared editing is provided, whether undo exists must be made explicit; makes clear what "undo" resolves to on a shared object; this is the single easiest default in this domain to get implemented backwards (corresponds to C4-1). |
| Required | Expression of an operation's scope of effect | effect.scope | A set, with each operation category marked with its scope of effect: only-this-person / specified members / all members. Must be discernible before execution. A view-control-type operation defaults to "only this person"; changing shared presentation is a separate action requiring explicit expression. | Must be configured whenever an operation has a different scope of effect across members; lets a person know before pressing whom this will affect; this is one of the interfaces between this category and visual tokens (corresponds to C4-4, C6-3). |
| Optional | Handling of a cascaded rollback | undo.cascade | Enumeration: not supported, with an alternative path stated / states the scope of impact before execution and rolls back after obtaining confirmation. There is no legal value of "silent cascaded rollback." The second tier must also declare how affected members are informed and the retrieval entry point for the rolled-back content. No extra confirmation may be stacked on when there is no subsequent change from someone else. | Configured when one of this person's steps has a dependency with someone else's subsequent change (corresponds to C4-2). |
| Optional | Tiering of destructive operations | destructive.level | A set, tiered by consequence, declaring the prior notice and recoverable period for each tier: tiering for a shared object must factor in others' visibility, others' references, others' presence, and the existence of others' contribution, not simply carry over the tiering from a single-user scenario. Someone else's contribution must have a retention or export path, and a referencing party must be able to learn of the invalidation. | Configured when an operation such as delete, archive, remove, or disband is provided (corresponds to C4-5). |
| Optional | Reminder aggregation for bulk operations | batch.notice | Reference: the aggregation granularity, aggregation window, and how detail is retained, defined by the product with the basis recorded. After aggregation, the recipient must still be able to see the specific items relevant to them; aggregating to a point where whether action is needed cannot be judged is forbidden. The operator must know before execution whom this operation will interrupt. | Configured when a bulk operation is provided that produces reminders to others; the aggregation granularity depends on the product's specific judgment, and this dictionary gives no uniform value (corresponds to C4-6). |
| Optional | Retention scope of the undo stack | undo.retention | Reference: the depth of undo history, whether it persists across sessions, and the invalidation condition (including its triggering event), defined by the product with the basis recorded, may inherit a session-level rule. Whenever any undo capability is promised, it must be resolvable to an actual boundary — even a short-session product must be able to answer "at what moment does the undo history become invalid." Behavior after invalidation must be "no effect, stated"; it must not fall back to a global undo. | Must be configured when undo.scope is not "undo capability not provided"; without this field, the actual boundary of undo.scope is not resolvable (corresponds to C4-1). |
| Optional | Delivery and mention of collaboration events | delivery.policy | Policy reference: resolving an event to its recipient scope, pre-send authorization, cross-channel deduplication, delivery receipts, and the resend scope; a mention must not implicitly grant permission, and a group mention must state its scope; pending content is filtered by current permission. | Must be configured whenever mentions, notifications, or an outbound integration exist; corresponds to C2-7, C4-7, C6-6. |
| Optional | Retries and partial results | retry.policy | Policy reference: the operation identifier, the deduplication scope and retention window, the criteria for success/failure/not-executed/unknown, the result-checking entry point, and partial-retry conditions. The deduplication window must cover the actual retry and queueing window; once past the window, check first, and do not auto-replay when the result is unknown and safety cannot be proven. | Must be configured when a collaborative write operation may retry or partially complete; corresponds to C4-7. |
Boundaries: undo.scope governs "whose stuff the undo removed," effect.scope governs "who this operation takes effect on," and destructive.level governs "how hard this operation is to recover from." The three are independent: an operation whose scope of effect is only-this-person can still be unrecoverable, and an operation affecting everyone can still be undoable. Merging them into one "operation risk level" would lose control in all three places at once.
5. Ownership of responsibility: who owns this, how it is handed off, and who it belongs to when a person leaves
Prefix: collab.ownership
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | The responsible-subject field | assignee | Reference: the value domain and resolution rule for the responsible subject. The value domain must include "no one responsible" as a legal and queryable value; it must not be inferred from a participant, watcher, creator, or most recent editor. The resolved result must be queryable to a specific subject or an explicit "no one responsible." | Must be configured whenever a task or object needs someone to drive it forward; gives "who owns this right now" an answer; participating is not the same as being responsible (corresponds to C5-1). |
| Required | Disposition on a member's departure | offboarding | A set, declaring the destination by object category: responsibility objects, exclusive locks, not-yet-finalized and private content, grants and external shares. Each category must have a clear destination with a queryable disposition; private content must not be merged into the shared space by default. No object may be left both inaccessible and lacking a disposition entry. | Configured when a member leaves, is deactivated, or is removed; de-authorization does not wait for the handoff, and a failed object must have a restricted custodial path and responsible party (corresponds to C5-3, C6-1, C3-5). |
| Optional | State model of a handoff | handoff.mode | Enumeration: one-sided assignment / assignment requiring awareness / assignment requiring acceptance. Each tier must separately express four factual dimensions: initiated / delivered-or-accessible / awareness-evidence status / accepted-or-not. When valid awareness evidence has not been obtained, record "awareness unknown" — recording it as "not yet viewed" is forbidden. A one-sided assignment does not constitute a completed handoff, and its responsibility-effective rule must be predefined. The respective effects of decline, revocation, reassignment, expiry fallback, repeated confirmation, and confirmation aimed at an already-invalidated request must be predeclared; release of responsibility is judged only against the currently valid handoff-request identifier. | Configured whenever task assignment or responsibility transfer is provided; a handoff is a two-sided event (corresponds to C5-2). |
| Optional | Fallback for unacknowledged awareness | handoff.timeout | A positive duration (explicit unit) + triggering event (the moment the handoff is initiated) + whether it renews + expiry comparison + fallback path, measured by the product according to its own response pace with the basis recorded. When awareness or acceptance evidence is not obtained for a long time, it must fall back to the initiator or a declared alternative subject; remaining at "assigned" while actually driven by no one is forbidden. A fallback must make the initiator aware. | Must be made explicit for whichever tier of handoff.mode is configured — even a one-sided assignment may still be waiting on awareness and acceptance evidence (corresponds to C5-2, C5-1). |
| Optional | Disposition of the no-one-responsible state | unassigned.policy | Reference: the trigger condition for entering "no one responsible," how it is presented, and the review cycle. This state must be visible, not silent: it must not appear as a normally progressing object. The review-responsible party must be resolvable. | Configured when a long-lived task or responsibility object exists (corresponds to C5-1, C5-3). |
| Optional | Boundaries for external and temporary members | guest.policy | Reference: the upper limit on an external subject's visible scope, permission validity period, and review method, with each item's strength marked: "a temporary permission has an expiry point, a long-term external grant has a review cycle and responsible party" and "contribution attribution must be clear and knowable to internal members" are non-turnoffable baselines; "external participation being continuously perceivable by internal members" is SHOULD-level, and a deviation must have its reason and alternative recorded (the same standard as C5-5). A long-term external collaborative identity declares its term and review method according to the actual relationship, and is not uniformly treated as a temporary guest. A product not distinguishing internal from external is recorded "not applicable." | Configured when an external guest, temporary collaborator, or cross-organization collaboration exists (corresponds to C5-5, C2-1). |
| Optional | Anchor and lifecycle of a discussion | discussion.policy | Policy reference: anchor location and invalidation presentation, the permission and record for resolve/reopen/delete/restrict, an objection entry point, summary sourcing, and unresolved items; resolved must not equal unanimous agreement. | Must be configured whenever a comment thread, suggestion, or review exists; corresponds to C5-6. |
| Optional | Effective conditions of a formal decision | decision.policy | Policy reference: the decision-maker's qualification, the passing condition, the snapshot and scope binding, the validity period or invalidating event, and re-verification after content changes; silence and ordinary interaction must not be counted as approval. The threshold is defined by the business, with no universal headcount given. | Must be configured when a stance, approval, or vote will trigger subsequent execution; corresponds to C5-6. |
Boundaries: a responsible subject is a state, not a function of activity level. Its input is one explicit assignment or acceptance, not who edited most recently, who spoke the most, or who has been online the longest — inferring the responsible subject from activity level is the single most typical design error in this category, and it violates both C5-1 and C1-6 at once. This dictionary specifies only how responsibility is expressed in the product; it does not specify how an organization divides labor.
6. Records: what is recorded, for how long, how the author is marked, and whether it can be exported
Prefix: collab.record
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | Distinguishing the author subject | authorship | The enumeration must distinguish at least three categories: the member's own operation / an operation performed on their behalf by someone else (delegation, impersonated login, admin-performed action) / an operation performed by automation or an Agent. An operation performed on someone's behalf must record both the actual executor and the party represented; an automation output must indicate its execution source. Subject attribution is forbidden from being rewritten due to a responsibility handoff, a member rename, or account deactivation. | Must be configured whenever multiple members can modify the same object; makes "who wrote this line" queryable; in a post-hoc investigation, this distinction is often the entire crux of the matter (corresponds to C4-3, C5-4). |
| Required | Record categories | categories | A set: content change, visible-scope change, responsibility change, member entry/exit (the four base categories); conditional categories: viewing record (required whenever presence.seen.mode has any recording tier), lock events (required when concurrency.policy includes exclusive locking), discussion and decision (when the corresponding capability is enabled), participation restriction (when restriction is enabled), operation result (when retry or bulk exists). A product adding a new category must register it under the same rule. Every category that actually exists must have its own independent retention period and external query ceiling; configuring viewing records without giving its corresponding retention period makes the configuration invalid. Each category declares its retention period and queryable scope separately. The recorded granularity must be proportionate to the undo unit and adjudication needs, not expanded by technical availability. | Must be configured whenever an event corresponding to a logging obligation occurs; only actually-existing categories are registered; makes clear what is recorded; this is the mechanism shared by C3-4's adjudication basis, C4-3's attribution basis, and C5-4's historical safeguard (corresponds to C2-2, C3-4, C4-3). |
| Required | Retention period | retention.ttl | A set of durations (explicit units), set separately for each category that actually exists in categories, each including a triggering event (the moment that record was produced) and an expiry comparison; measured by the product according to its audit and collaboration needs with the basis recorded; all must be queryable. A configuration change must not reset the age of an existing record. It is permissible for something to become unqueryable once it expires, but that period must be predeclared and must not appear as "never recorded." Being merely viewed does not renew it. | Must be configured whenever any collaborative event is recorded; makes clear how long each category of record is kept; a mismatch between the period and what is externally stated is itself a violation (corresponds to C4-3, C1-5). |
| Optional | Exportable and searchable scope of records | export.scope | Reference: the scope and permission requirements for a change record to be exported, searched, or aggregated. The scope is bound by presence.purpose.scope: an export or search path becoming a channel that bypasses the collaboration-purpose restriction and is used to evaluate an individual's activity is forbidden. | Configured when historical export, an audit report, or cross-object search is provided (corresponds to C1-6, C2-4). |
| Optional | Disposition of a personal identifier in history | anonymization.mode | Enumeration: no disposition (applicable only when no disposition requirement has been triggered) / anonymize and mark the disposition fact / remove and mark the disposition fact. Once a disposition requirement is triggered, "no disposition" is forbidden: when automatic disposition is not possible, it must be handed off to an authorized manual path, with the incompletion recorded and a responsible party designated — the expiry of the ordinary retention.ttl must not substitute for a dedicated disposition decision. There is no legal value of "replace with someone else's name." The disposition itself must be identifiable, and must not make the history look as though it was never changed. | Configured when a statutory deletion request or organizational policy requires removing a historical identifier (corresponds to C5-4). |
Boundaries: a record is for the content, not for evaluating the person. The same set of records serves three purposes at once — operation attribution, conflict adjudication, and historical safeguard — but its readable scope is uniformly bound by presence.purpose.scope — one mechanism serving multiple purposes is the norm, but expansion of purpose is not. The completeness of a record does not conflict with the reduction of perceptual information: recording it and presenting it to others are two separate decisions.
7. Private room: who sees not-yet-finalized work by default, where to try things out, and when something converts to shared
Prefix: collab.private
| Level | Design decision | Token field | Type and legal values | Applicable condition and effect |
|---|---|---|---|---|
| Required | Default visibility of not-yet-finalized content | draft.default | A fixed value: visible only to the author. A draft with a specified audience must be shared separately and explicitly by the author themself; this must not be written as a new draft's default configuration. Converting to shared-visible must be an explicit action, and must not be triggered by a timeout, loss of focus, closing the page, or autosave. Private, not-yet-finalized content must be excluded from search, notification digests, and exports facing others; a private search or backup the author is authorized to use is not restricted by this. The save location, recovery boundary, and retention path on failure must be made explicit by the product; saved input must not be actively cleared due to navigation or a publishing failure. | Must be configured whenever content creation, commenting, or submission is provided; lets someone dare to write an undecided thought in a shared space; not-yet-finalized is not "pending review," nor is it "save failed" (corresponds to C6-1). |
| Required | Ownership of personal view state | view.ownership | A set, listing the ownership of presentation controls such as filtering, sorting, grouping, collapsing, zoom, and display density: the default must be "personal." Changing shared presentation state must be an explicit action perceivable by others. The existence of a shared tier does not change the default ownership. | Must be configured whenever a view control is provided; keeps "let me adjust this filter" from changing the whole team's view (corresponds to C6-3, C4-4). |
| Optional | Exploration-path mode | sandbox.mode | A set, containing at least one of: personal view / a draft or branch with access scope limited to the author / sandbox preview / suggestion mode. Each item must be separately verified by "whether it produces content, a notification, or a shared-state change visible to others" — a shared suggestion mode satisfies "not directly changing the formal content," but does not satisfy "does not affect others"; providing only a shared suggestion mode does not satisfy this field, and a private preview or draft path must additionally exist. Must not be an empty set; "the operation can be fully undone" does not constitute a qualifying path. The path must be discoverable at the shared object's editing entry point, not exist only in documentation. No partially-effective result is left behind when an exploration is abandoned. | required_when: a modification on a shared object takes effect for others immediately, and it does not fall under an already-recorded structural not-applicable situation (corresponds to C6-2). |
| Optional | Truthful statement of recall capability | recall.disclosure | Reference: after content is recalled, deleted, or edited, the actual state and description of already-delivered copies (push, email digest, external integration, someone else's cache). Must truthfully state that the recall does not reach a copy that has already been seen, and must not use "recalled" to override this fact. | Configured when a push, email, or external-integration forwarding path exists (corresponds to C6-4, C2-3). |
| Optional | Scope boundary of private communication | channel.scope | Reference: the scope within which private communication content can be read, and its handling in export, search, aggregation, and summary generation. Including unauthorized-to-share private content when generating a summary, report, or knowledge compilation facing the shared space is forbidden; when such a compilation is generated by an Agent or automation, its readable scope is equally restricted. | Configured when private communication and a shared record are both provided (corresponds to C6-5). |
| Optional | Transfer from a private area to a shared area | transfer.mode | Enumeration: an explicit action by the person themself alone (applicable only to an object such as a single-user private note that contains no conversation-partner content) / an explicit action by the person themself with the original conversation partner made aware (the sole legal value for an object with conversation-partner content, such as a direct message or a private comment). Both copying and moving must perform a target-audience determination: a forwarded copy may not change the original object's access control, so the notification obligation must not rely solely on visibility.change.notice. The transfer must be an explicit action, and must not be achieved through search, reference, aggregation, or cross-feature reads. A subsequent change to the visible scope of the original content is handled per visibility.change.notice. | Configured when a path exists by which a private note, private comment, or direct message can be brought into a shared space (corresponds to C6-4, C6-5, C2-2). |
| Optional | Personal reminder pacing | attention.policy | Preference-policy reference: the mutable objects/threads and notification categories, a time-zoned do-not-disturb schedule, how it resumes, a query entry for necessary events; an emergency exception declares its triggering subject, condition, frequency, and record. Muting does not release responsibility, is not the same as having read it, and also does not allow a necessary event to be erased. | Must be configured whenever collaborative notifications exist; corresponds to C6-6, C4-6. |
| Optional | Participation control and help-seeking | participation.policy | Policy reference: the distinction between mute/block/restrict/remove, which interactions each affects, the operator's permission, taking effect and release, duration or review, the restricted-state explanation, the help-request recipient, and the material scope. A personal block does not automatically change shared-content permissions. | Must be configured whenever shared discussion, directed interaction, or member restriction exists; corresponds to C6-7. |
Boundaries: the default ownership of private state is judged by "who this thing is visible to when no explicit action is taken," not by "whether the product has provided a private tier." Providing a draft feature that defaults to real-time sync to everyone does not satisfy the first tier of draft.default. An editing-activity indicator visible to others during collaboration (concurrency.editing.indicator) is not the content-being-sent-out this category addresses; the two are governed by different fields.
8. Interlocking requirements for optional items
A capability may be left unenabled; once enabled, its dependencies must be complete. The table below adds no new field or third level; the related values may be inherited by a product rule. The shared prefix collab. is omitted within the table.
| Capability or promise | Dependency that must be made explicit | When not satisfied |
|---|---|---|
| Presenting others' presence | When presence.identity.mode is not "presence not presented," presence.freshness.ttl, presence.awareness.granularity, presence.purpose.scope, presence.visibility.self, and presence.subject.view are required. | Presence is not presented; collaboration indicators rely only on the content change itself. |
| Providing "who has viewed" | When presence.seen.mode is not "not recorded," the audience and the corresponding retention period in record.retention.ttl must be separately declared; once turned off, an equivalent conclusion cannot be pieced together from presence history. | Viewing behavior is not recorded; recorded data is deleted per the declared period. |
| Presenting region-level or editing-activity-level perception | When presence.awareness.granularity is set to "which region within the object" or "the ongoing editing activity," each item must state the specific collaboration problem it avoids, and presence.purpose.scope must already exclude evaluative uses. | Present only "present or not" or "which object." |
| Link sharing | When visibility.link.mode is not "no link sharing provided," the validity period, revocation capability, and revocation's non-reach must be declared; the link-holder entry in visibility.audience is marked as a non-enumerable category; visibility.audience.review covers link grants. | Retain only already-declared, valid named-subject or group sharing, without silently expanding or replacing an existing grant. |
| A permission-filtered list, history, or search | visibility.partial.disclosure is not "no marking," and the marking itself does not leak the hidden content. | Suspend that view, or use an existence-non-disclosing scope statement; permission filtering cannot be turned off. |
| A hierarchically inherited permission structure | visibility.inheritance.trace can be resolved to the stacking rule and the conflict-value principle. | Block the affected permission change; continue an existing grant's scope only while it remains verifiable, without silently switching to a different permission model. |
| Auto-merge | When concurrency.policy includes auto-merge, concurrency.merge.scope's semantic list, the identifiability of the merged product, and a correction path are required; combinations outside the list have a clear handling path. | Disable new submissions depending on auto-merge and preserve input; use only an already-declared, fully-dependent exception path, without temporarily switching algorithms. |
| Exclusive locking | concurrency.lock.ttl must include holder resolvability, expiry behavior, and a forced-release path, with a forced release protecting saved drafts, declaring the offline-recovery boundary, and rejecting a stale-lock write; ownership.offboarding covers a locked object. | Suspend new-edit admission depending on the lock, preserve existing input, and provide a fix; do not temporarily switch algorithms. |
| Offline or weak-network editing | concurrency.offline.window and the four dimensions of concurrency.convergence.presentation are complete (including unknown and failed semantics); the handling path on return is consistent with concurrency.policy. | Offline editing is not supported; without a connection, modification is not accepted, and this is truthfully stated. |
| A conflict requiring manual adjudication | concurrency.arbiter does not assign the adjudicator by the fact of being the last submitter; the minimum adjudication-basis set and how the other party learns of it are declared; ownership.assignee is resolvable. | Preserve both sides' input and block an overwrite; set a queryable pending state and an authorized escalation entry point. |
| Undo on a shared object | action.undo.scope resolves to this person's own contribution, and action.undo.retention's invalidation behavior does not fall back to a global undo; when a cascading impact on others is possible, action.undo.cascade is required. | Do not provide undo; when history recovery is provided, use a separate entry point and separate wording. |
| Bulk operations | action.batch.notice's aggregation granularity and detail retention are made explicit, and action.effect.scope covers that operation category. | Do not provide a bulk path; handle each operation individually per the single-operation rule. |
| Deleting, archiving, or disbanding a shared object | action.destructive.level's tiering already factors in others' visibility, reference, and contribution; someone else's contribution has a retention or export path. | Do not provide the operation, or restrict it to a fully recoverable operation. |
| Task assignment or responsibility transfer | ownership.handoff.mode and ownership.handoff.timeout are complete; unacknowledged awareness has a fallback, and the initiator is made aware. | Do not express a transfer of the responsible subject; ownership.assignee changes only by the person's own claiming. |
| A member can be deactivated or removed | ownership.offboarding covers all four categories — responsibility objects, exclusive locks, private content, and external grants — with each category's disposition queryable. | Permission termination executes per the already-authorized effective requirement, not conditioned on content handoff having completed. When automatic handoff is not possible, place the pending object into a restricted, queryable custodial state that does not expand its audience by default, designate a handling responsible party and next step; the original member's access is still terminated. |
| External guests or cross-organization collaboration | ownership.guest.policy's ceiling on visible scope and permission term are made explicit; external participation is perceivable to internal members; visibility.audience.review covers external grants. | Do not enable a new external-access grant; an export is likewise external exposure and must be independently checked for authorization, and cannot be used as a bypass. |
| Historical export, audit reports, or cross-object search | record.export.scope is made explicit and does not exceed presence.purpose.scope. | Do not provide export or cross-object search; a record is queryable only within the object. |
| Removing a personal identifier from history | record.anonymization.mode is not "no disposition," and the disposition fact is identifiable. | When a disposition requirement has been triggered but cannot be completed automatically, hand it off to an authorized manual path and record the incompletion; the expiry of record.retention.ttl must not override a dedicated disposition decision. "No disposition" may be chosen only when no disposition requirement has been triggered. |
| A shared modification takes effect for others immediately | private.sandbox.mode is not an empty set, each item has been verified by "whether it produces content, a notification, or a shared-state change visible to others," and the path is discoverable at the editing entry point. | Suspend this shared-modification capability, or provide a preview/draft that genuinely does not affect others; "the operation can be fully undone" does not constitute a substitute. |
| Push, email, or external-integration forwarding | private.recall.disclosure is made explicit, and the recall's wording matches its actual capability. | Do not forward a content copy externally; if a reminder is provided, send only an entry point that is authorized to be disclosed and does not leak the object's existence. |
| Private communication coexisting with a shared space | private.channel.scope and private.transfer.mode are complete; the read scope of an aggregation-type feature is auditable. | Do not provide private communication, or private content does not participate in aggregation or search facing a larger audience. |
| Collaboration changes and following a viewpoint | presence.presentation covers keyboard, assistive technology, focus protection, and exiting a follow session. | Preserve an accessible list and action entry point; disabling the accessibility entry point must not be used as a way to degrade. |
| De-authorization during runtime | visibility.revocation.policy covers an in-flight request, a long-lived connection, and a queue. | Block affected new reads and writes; preserve a restricted checking path, without continuing to let things through. |
| Mentions and outbound notifications | action.delivery.policy and private.attention.policy jointly resolve the audience, permission, muting, and emergency exception. | Stop new external delivery; the event remains retained within the product, queryable by authorized members. |
| Retry or partial success | action.retry.policy, the corresponding operation-result record, and the retention window are complete. | Do not auto-retry an unknown item; provide a result-checking and manual path. |
| Comments and a formal decision | ownership.discussion.policy; ownership.decision.policy is additionally required when it triggers execution. | Do not treat a discussion state as a decision; do not execute a subsequent action lacking valid approval. |
| Participation restriction and help-seeking | private.participation.policy covers scope, review, release, and material permission. | Do not implement an undefined expanded restriction; preserve a path for personal muting and for seeking help from a clearly designated responsible party. |
"Inherit the default" must resolve to an explicit value, source, and effective scope; it cannot be merely a sentence of explanation.
9. Configuration taking effect and operational facts
Every configuration declares its applicable object and member scope, responsible party, value source, effective event, inheritance chain, and actual value. A configuration change must state its effect on an in-progress lock, handoff, notification queue, and record; it must not, without explicit authorization, expand an existing audience, restore a revoked permission, or reset a record's age.
- Tightening permission: block a not-yet-submitted action at the execution boundary; a long-lived connection and a pending queue re-authorize, without waiting for content handoff.
- Changing the concurrency strategy: protect input currently being edited first, and make explicit the applicable object and the switchover time; it must not silently switch to a different concurrency algorithm for lack of configuration.
- Adjusting a personal preference: affects subsequent delivery from the declared effective time onward; it does not release responsibility, nor fabricate a past event as read.
- Dependency failure: block the affected new action, preserve contribution already produced, pending records, and a fix entry point; whether an existing valid behavior can continue must have its basis stated item by item.
The time limit, default audience, and adjudicator-resolution rule in a configuration record are policy; the actual expiry point, ACL, adjudication result, and receipt come from the running system and must not be filled in as a success value from a design mockup.
10. Fixed baselines and configuration acceptance
The following is a summary of the non-turnoffable requirements; the applicable scope, exceptions, and strength are governed by the main text of the Design Guidelines.
| Domain | What no configuration may allow |
|---|---|
| Perception and participation | Treating a session as the person; treating no-receipt as not-read; using collaborative activity for personal performance evaluation; penalizing a member for turning off presence, muting, or using an assistive-technology mode |
| Permission | Authorizing by a hidden button alone; expanding access via a mention, summary, or export; continuing to submit on a stale session after de-authorization; describing an external copy as recalled |
| Concurrency and saving | Silently discarding input; treating convergence as semantic correctness; submitting with an expired lock; claiming input that exists only on an offline device has already been backed up |
| Operation results | Undoing someone else's global most-recent step; blindly retrying when the result is unknown; showing partial success as complete success; a repeat resend bypassing muting |
| Responsibility and decisions | Assignment equaling acceptance; a stale request changing new responsibility; resolved equaling unanimous agreement; silence equaling approval; a failed handoff blocking de-authorization |
| Private room | Autosave turning into publish; a shared suggestion masquerading as a private draft; a personal filter changing someone else's view; a private discussion automatically entering a public summary |
Configuration acceptance order: identify the applicable capability → check the field type and legal values → resolve the source and inheritance → check all dependencies → verify the mechanism and operational facts → check each party's interface and assistive-technology entry point. Record pass, fail, not applicable, or unverified field by field; when a key mechanism is missing, "configuration complete" must not be written as "design passed."
It is recommended to test the same scenario with two opposite configurations: presence on/off, normal/muted delivery, shared/private draft, and reconnection with-permission/after-revocation. The change should affect only the scope the configuration is responsible for, and must not incidentally change responsibility, content permission, or the concurrency strategy.
Configuration delivery and validation
A draft's default audience does not mean every shared document must delay synchronization; when a user actively enters real-time shared editing, their already-declared shared scope continues to hold. Converting a personal draft to shared requires an explicit action, and a copy that has already propagated cannot be promised as fully recallable merely because this end undoes it. The current author, the responsible party, and the online status remain independent facts.
The accompanying executable sample covers only collab.private.draft.default; every other field is validated item by item against this dictionary — not being covered does not mean not applicable or already passed. The sample is a positive/negative format example for the selected field, not a product preset that directly enables every capability. A complete product delivery additionally includes applicability, dependencies, evidence, an execution mapping, and the effective boundary for an in-progress operation.
When a field's name, type, or meaning changes, update its referencing parties and acceptance samples; when only the description is changed without changing the legal behavior, the existing field name is kept. A caller reads the resolved effective configuration, and does not infer permission, measurement, or completion facts back from a UI control, animation, or model-generated text. See corresponding scenarios.
References
This document provides sources for the Design Guidelines and Design Token. External material is used to prove that a problem exists, to explain a mechanism, or to state an implementation limitation; the mandatory requirements of this domain are defined by the main text of the guidelines themselves, and one product's behavior cannot be directly treated as a universal requirement.
1. Publicly available material directly verified
The following official pages have had their relevant body text read. A research writeup, an accessibility success criterion, and a product help document carry different weight; this table does not constitute a hands-on product test or a legal assessment, and it does not transplant a vendor's duration, headcount, or default toggle into this dictionary's default value.
| Source | Reading scope and supportable facts | Corresponding design landing point | Limitation |
|---|---|---|---|
| W3C — Collaboration Tools Accessibility User Requirements | The sections on real-time co-editing, annotation, diffs, notifications, and access control; states user needs such as controlling activity indicators, navigating comments, and providing non-color distinction | C1-7; collab.presence.presentation | A Group Note; the user needs it lists are non-normative; this document cannot claim to satisfy all accessibility requirements on this basis |
| W3C — Understanding Status Messages | The intent, boundary, and assistive-technology presentation of status messages | Reachability of state in C1-7; a change indicator cannot rely on vision alone | This page explains the status-messages success criterion; it does not require announcing every collaborative event |
| Yjs — Awareness | The Awareness CRDT, state propagation, timeout, and disconnection handling; perception is an independent, optional mechanism | C1-1, C1-2, C3-2; time-bound information cannot serve as a mutual-exclusion guarantee | Proves session-activity propagation, not that the actual person is present or has actually become aware; an implementation's duration is not given as a universal recommendation |
| Yjs — Y.UndoManager | Selective undo, scope, trackedOrigins, and stopCapturing | C4-1; undo selects by contribution source, with the unit made explicit | Filtering by source is a usable mechanism; it does not prove every cross-person dependency can be safely undone, nor does it prescribe a data structure |
| OWASP — Authorization Cheat Sheet | Least privilege, default deny, per-request authorization, server-side enforcement, failure handling, and testing | C2-4, C2-7; de-authorization covers an in-flight path | Security-practice material; this document's notification, input-protection, and receipt rules are a further product-design derivation |
| GitHub — Commenting on a pull request | Bulk comments reduce repeated notifications; resolving collapses a thread; unresolved, resolved, and outdated discussions are navigable | C4-6, C5-6; thread state and location | "Resolved" cannot be used to infer all participants agreed; a reopen and objection path are this document's own requirement |
| GitHub — About protected branches | Required reviews; the optional stale-approval-dismissal and re-review-on-latest-commit mechanisms | C5-6; an approval is bound to the content as it stood at that time, and re-verified after a change | These are configurable repository policies, not a basis for requiring every discussion to go through approval |
| Slack — Pause your Slack notifications | Pausing, resuming, notification schedules, and emergency-override limits; messages received while paused remain viewable after resuming | C6-6; do-not-disturb does not delete a collaborative event | Its emergency count, identity hints, or default settings are not copied verbatim; the specific boundary is defined by the product |
| GitHub — Limiting interactions in your organization | The restriction's operator, scope of activity, duration, and excluded subjects | C6-7; a participation restriction must have a scope and a release condition | The page targets an organization's public repositories; it cannot be used to require an internal team to adopt the same member tiering |
2. Academic problem space and existing reading records
| Number and source | Verification scope | Supportable facts and landing point | Cannot be used to conclude |
|---|---|---|---|
| R01 Gutwin & Greenberg, A Descriptive Framework of Workspace Awareness for Real-Time Groupware, CSCW (journal) 11(3–4), 2002University site PDF | Existing reading record: relevant sections (Section 3, Sections 4.1–4.4, and the start of Section 5, PDF pp. 5–13); historical research | The basic information set of workspace awareness answers the elements of "who, what, where, when, and how"; the framework has three parts — the information that constitutes awareness, the mechanisms that gather it, and awareness's uses in collaboration. The original text explicitly states "awareness is a secondary goal within the task," and the technical conditions of groupware themselves reduce the information that can be perceived. Supports C1-3 in binding perceptual granularity to "which collaboration problem it is meant to solve," and C3-2's positioning-granularity requirement. | The framework is descriptive, used to characterize the design space; it does not prescribe which fields should be presented or at what granularity. The original text's subject is a synchronous shared workspace of 2–5 people; it does not cover large-scale asynchronous collaboration. It does not put forward this document's "granularity upper bound" claim — that is this document's own design judgment. |
| R02 Grudin, Groupware and Social Dynamics: Eight Challenges for Developers, Communications of the ACM, 1994Course-site reprint | Existing reading record: relevant sections (all headings of the eight challenges and their related paragraphs); a reprint, not the publisher's page; historical research | The first two of the eight challenges are "disparity in work and benefit" and "critical mass and the prisoner's dilemma"; the fourth is "exception handling in workgroups"; the sixth is "the difficulty of evaluating groupware is underestimated." The original text states that "most groupware requires a subset of people to do additional work, entering or processing information the application needs." Supports C1-4's "a reduction tier must not produce a functional penalty" (a mismatch of cost and benefit is an established failure pattern), the distinction in C5-2's handoff evidence (exception handling), and the existence of the "over-delivery" side in the guideline's Section 2.3. | This is a 1994 experiential survey, not empirical research, with no quantitative data. It supports no claim about contemporary product adoption rates, and specifies no concrete mechanism adopted by this document. What was previously read is the course-site reprint; word-for-word fidelity to the finalized CACM text has not been re-verified. |
| R03 Dourish & Bellotti, Awareness and Coordination in Shared Workspaces, CSCW'92Author-site PDF | Existing reading record: relevant sections (Section 4 shared feedback, 4.1 ShrEdit description, 4.2 method, 4.3 observations, PDF pp. 4–5); historical research | ShrEdit locks at the text-selection level, so two people cannot select the same span of text at once; editing actions display in the shared window with low latency, and cursor "collisions" are indicated with a sound and a pop-up. At the same time, each user may have a private window visible and editable only to themself, used for taking notes or drafting before pasting into the shared document. Design based on groups of three, with four groups' recordings analyzed. Supports C3-2 (a conflict indicator appears earlier than the conflict is produced), C3-5 (block-level locking is an established practice), and C6-1/C6-2 ("a private window within a shared area" is not a new invention — it is a design that already existed in 1992). | Qualitative observation of four groups of three people on a single system; it cannot be generalized into a universal effect, nor used to assert that passive awareness is superior to explicit coordination. It did not study permissions, responsibility attribution, or offboarding disposition; these landing points are unrelated to this source. |
| R04 Ellis & Gibbs, Concurrency Control in Groupware Systems, ACM SIGMOD 1989, pp. 399–407University course-site PDF | Existing reading record: relevant sections (abstract, Section 1, 2.1 Issues, 2.2 Other Approaches, PDF pp. 399–401); historical research | Explicitly lists three problems with locking schemes: the overhead and waiting of acquiring a lock, granularity being hard to determine (should the lock cover a section, a sentence, a word, or a character), and when to request and release the lock being hard to judge; and records the established practice of "tickle locks" — a request for a locked resource may be granted when the current holder is inactive. The original text also states that groupware must be able to recover from "a participant leaving without notice (suddenly leaving the session, going to get coffee)." Supports C3-1 (concurrency strategy is a predetermined design decision) and C3-5 (a lock must have a holder, a time limit, and a forced-release path). | This is an algorithms paper whose goal is convergence and response time, not a user-experience requirement. It does not support "which concurrency strategy should be chosen"; this document likewise explicitly declines to prescribe that (C3-1's boundary conditions). System conditions in 1989 differ from today's. |
| R05 Sun, Jia, Zhang, Yang, Chen, Achieving Convergence, Causality Preservation, and Intention Preservation in Real-Time Cooperative Editing Systems, ACM ToCHI 5(1), 1998Author-institution PDF | Existing reading record: relevant sections (the semantic-inconsistency example at the end of Section 1, Definitions 1–3 of the consistency model in Section 2, print pp. 67–68) | The original text uses a concrete example: two people insert "a" and "s" respectively before and after "student"; each site's content is fully consistent and both operations' intentions are preserved, yet the result "There will be a students here" is still semantically wrong; the authors state that this kind of semantic inconsistency "cannot be resolved by the underlying consistency-maintenance mechanism without a collaborating human intervening." This is the most direct piece of evidence for C3-3 (forbidding treating "technically convergeable" as "mergeable in business terms") and the terminology entry "convergence is not correctness," and it also supports C3-4's handing adjudication back to a person. | The paper's scope is the syntactic consistency of text-editing operations; it proves convergence does not imply semantic correctness, but it does not provide a list of "which semantic combinations can be safely auto-merged" — this is exactly the thin point this document's own Appendix B.2 item 1 admits to. It also does not touch on permissions, responsibility, or perception. |
| R06 Yu, André, Ignat, A CRDT Supporting Selective Undo for Collaborative Text Editing, DAIS 2015Author-institution PDF | Existing reading record: relevant sections (Section 1 introduction, Section 2 related work, Section 3 Undo Effects, PDF pp. 1–2) | Explicitly records that at the time this paper was written, Google Drive only allowed a user to undo operations they themself produced — i.e., "maintaining an undo stack per member" was already established practice in mainstream products, not an invention of this document; it also cites a user study stating that people do in fact expect to be able to undo someone else's operation, showing this is a tradeoff, not a solved problem. Section 3 gives "groundless modification": undoing an insertion that someone else's subsequent edit depends on leaves a residue no one intended. Supports C4-1 (undo resolves to this person's own step) and C4-2 (a cascading impact must be stated before it is executed). | This is an algorithms-and-performance paper; its user-expectation statement is a quote drawn from another source, whose origin has not been retraced here. It does not assess the usability of any undo interface, nor does it support the implementation-cost assessment this document's Appendix B.2 item 3 admits is missing. Google Drive's behavior is as of when this paper was written and has not been re-tested on the product since. |
| R07 Mazurek, Klemperer, Shay, Takabi, Bauer, Cranor, Exploring Reactive Access Control, CHI 2011Author-institution PDF | Existing reading record: abstract and introduction (PDF p. 1); historical research | A one-week experience-sampling study in which participants used a simulated "reactive access control" system. The introduction states that in reality, people requesting access is common, but "in most cases a reactive policy-creation flow is not directly supported by the access-control system, so users route around the system, making the request by email or phone." The conclusion supports reactive authorization as a usable pattern while noting the pattern has clear drawbacks. Directly supports C2-6 (unauthorized access gives an actionable next step and a request entry point, with the request having a recipient and a receipt). | The subject studied is household data sharing, not organizational collaboration; the participant count and duration are limited, and the system is simulated. It does not prove every product should provide a request feature — this is why C2-6 is marked SHOULD and permits a not-disclosing-existence response. |
| R08 Rashidi, Vaniea, Camp, Understanding Saudis' Privacy Concerns When Using WhatsApp, USEC'16 (2016-02-21)NDSS-site PDF | Existing reading record: abstract and introduction (PDF p. 1) | A survey of 626 Saudi WhatsApp users (snowball sampling). The abstract states users are familiar with privacy settings and use them in particular to restrict the visibility of "last seen"; 83.9% of respondents had been contacted by a stranger; respondents wanted to be asked before being added to a group, and wanted control over the visibility of personal-profile information (such as a phone number). Supports C1-1 (last-active time is its own independent category of exposure), C1-4 (the perceived party needs both knowability and a reduction path), C1-5 (presence and retrospective records are decided separately), and C2-2 (notification before and after adding someone to scope). | A single country, a single instant-messaging product, a snowball sample, and 2016-vintage data; the proportion figures cannot be transferred to a work-collaboration product or a different culture. The original study is about privacy in social messaging, not workplace-monitoring compliance. It supports no specific choice of default value. |
| R09 Hudson & Smith, Techniques for Addressing Fundamental Privacy and Disruption Tradeoffs in Awareness Support Systems, CSCW'96 | Pending verification (an accessible public original text has not yet been obtained) | Kept as the classic lead for the tradeoff in C1-3, "the same piece of information is collaboration at a coarser grain and surveillance at a finer one." | This document has drawn no mechanism, terminology, or conclusion from it. The original text must be obtained before it is cited. |
| R10 Why Did You/I Read but Not Reply? IM Users' Unresponded-to Read-receipt Practices and Explanations of Them, CHI 2022, DOI 10.1145/3491102.3517496 | Pending verification (the full-text page returns 403; only the indexed abstract has been seen) | Kept as a lead on the problem source for C1-5, "a read receipt is a category of retrospective exposure and produces response pressure." | The method, sample, and every conclusion remain unverified; the main text and the dictionary therefore cite none of its findings or figures. |
3. From material to clause: the design derivation
| Problem to solve | This document's choice | Evidentiary boundary |
|---|---|---|
| A collaboration indicator exists but cannot be acted on | Information, comments, and diffs have non-color presentation and a keyboard entry point; activity announcements can be reduced | Accessibility material supports the need; the specific interaction still requires assistive-technology and user verification |
| A closed discussion is treated as everyone's agreement | Separate thread-resolution, formal decision, and execution; a formal decision is bound to a content snapshot and eligibility | GitHub demonstrates these mechanisms can be separated; this document does not require replicating its approver count |
| An old session or queue survives after de-authorization | Re-authorize at the execution and delivery boundary, distinguishing acceptance from taking effect | OWASP supports per-request and fail-safe design; the propagation deadline across systems still needs actual verification |
| A brief network error causes a duplicate side effect | Query the actual result, deduplicate, retry per item, keep unknown as unknown | Derived from the operation's promise; it claims no protocol guarantees absolute exactly-once delivery across every system |
| Excess mentions, muting, and disconnection from the task | Receiving preferences are independent of permission, responsibility, and event records; a mention does not implicitly authorize | Notification controls have platform precedent; "a mention does not expand access" is this document's own protective requirement |
| Participation control produces a false sense of security | Separate personal blocking, restricting participation, and revoking access; provide help-seeking and review | Public platforms prove a restriction can have a scope; internal collaboration still needs verification against organizational process |
| A private suggestion is confused with a public draft | Whether something is private is judged by its actual visible scope and its notification/search path | Derived from the promise being made; a feature name, a suggestion style, or "can be undone" does not prove it is private |
4. What has not yet been proven
- There is no cross-product universal list of auto-mergeable semantics, lock duration, handoff timeout, record retention period, or emergency-notification frequency; a configuration must be accompanied by a task basis and verification.
- No user study, product fault injection, or systematic literature review was conducted this time. The combined use cases for boards, whiteboards, and reviews are illustrative review material, not a passed test result.
- Most of the underlying research comes from text co-editing and small groups; it cannot be extrapolated into a behavioral regularity for every organizational culture, social platform, or real-time meeting.
- Employee monitoring, personal-information handling, data retention, e-discovery, and cross-border processing have not received a regulatory review; this document draws no jurisdictional conclusion.
- "Perceptual data is not used to evaluate an individual," a private draft's default, and non-response not constituting approval are explicit product commitments, not a design that literature has proven to be the only one.
- The attribution of principles still needs testing through real review; the rules and token fields supplemented this time are this domain's own vocabulary, not an existing field from an external standard.