---
type: plan
version: 1
status: proposed 2026-09-14 from rian's walk through eleven threads on staging; §6 steps 1 to 5 built and on staging the same day (0.48.0, migrations f0a1b2c3d4e5 and f1a2b3c4d5e6), then rian's redesign of the panel and the card the same evening (see the handoff of 14 Sep: Later is a mark on an open thread, a decision a mark on a resolution, flags, a view chooser); rian iterated on it through the evening and called it done for now (the handoff of 14 Sep lists the changes); step 6, the standard and the pack, waits on a caddie session
supersedes: nothing; amends the Interaction Standard (caddie, 04-interaction-standard.md §4.1, §5, §6) once rian adopts it
---
# The discussion workflow: the right people see the right conversations, and nothing is lost

Written from rian's notes of 14 Sep, thread by thread. The aim he set: few things a person can
do, each obvious, so they are done consistently; the right people prompted without large counts;
every conversation traceable, none forgotten, and the noise cut. This is a proposal for DFP first
and for the Interaction Standard (caddie and every app on it) once it has proved itself here.

## 1. What the eleven threads have in common

Every case rian raised is one of five needs:

1. **A count that overwhelms** (59 unread, 66 open). Unread should mean *new since I looked*,
   not *everything that exists*; and the only number worth a glance is what needs me.
2. **A hand-off**: "Adam, confirm you have seen this"; "Mark, your view on the whiskey example";
   "Rian, build these three". Today the only tools are a mention (rings once, then nothing
   tracks it) and the curator-only follow-up mark (rings nobody, only rian clears it).
3. **An acknowledgement without a comment**: "I've read it and agree" (700ml vs 70cl).
4. **A conversation that is settled but not dead**: resolved with an answer (dutyfreeawards),
   parked for later (cruise ports, price charts), concluded and awaiting the build (the URL
   decisions), or concluded and then added to (brand pages). Today "resolved" is one bucket,
   drawn as struck through until this morning, and there is no "later" and no "put away".
5. **Tidying**: two questions in one comment, a comment that belongs to another topic, and
   "which comment do you mean?".

## 2. The model: three states, one hand-off, one acknowledgement, the closing word as the record

**A conversation is Open, Resolved, or Archived.** Replies are allowed in every state and never
change the state. Open is the default and the only state that counts as "an open issue".

- **Resolve** takes a closing word (optional but offered; it is the record) and an outcome:
  **Done** (concluded) or **Later** (not now; keep the thread; it lists under Later, not under
  Open, and the discussion may go on). Resolving tells the people in the conversation, and the
  event carries the word. Anyone who took part in the conversation, or a curator, may resolve
  or reopen (today: only the opener or a curator; the wider rule stops "Adam will never press
  it" being a reason to leave things open).
- **Reopen** returns it to Open, with a word if wanted.
- **Archive** (curators) puts a resolved conversation away for good: incorporated into the
  build, or no longer relevant. Hidden from every list unless "Show archived"; never deleted;
  its closing word stays in the decisions log (§4).

**An ask is the one hand-off.** On any conversation, anyone who may write can ask one person for
one thing: *for whom* and *a line saying what* ("confirm you have seen this", "your view on the
whiskey example", "build: the airport URL leads with the name"). It rings that person as a
**turn** (needs you, the same weight as a mention), the card wears a chip ("Mark: your view"),
the Needs-you tab lists it, the digest lists it. The person marks it **Done** with one tap and an
optional word (posted as their comment); a curator may also mark it done. Several asks may sit
on one conversation (Mark to comment, Rian to build). This replaces the curator-only follow-up
mark of 0.48.0, which is the same thing with one person and one curator.

**Got it is the one acknowledgement.** One tap on a comment: "seen and agreed", shown under the
comment as "Got it: Mark, Adam". It also completes any open ask for you on that conversation,
so "Adam, confirm you have seen this" is closed by a tap, not a comment. No notification for a
Got it except to the asker, as news.

**The closing word is the record.** A decisions log (a tab in the panel, or a page) lists every
conversation resolved with a word, newest first, searchable, archived ones included and marked.
Nothing is written twice: the decision lives where it was made.

**What a person can do, in full:** Reply · Got it · Ask · Done · Resolve (Done or Later, with a
word) · Reopen. Curators add: Move to another subject · Quote into a new topic · Archive.
Nine verbs, six of them for everyone. Nothing else is added.

## 3. Counts and prompts: what needs you leads, the rest is news

- **Needs you** = open asks for you + unread mentions of you. It is the header control's state,
  the panel's opening tab when it has anything, the first tab, and the whole of the digest mail.
- **Unread** = someone else wrote after you last opened the conversation. Seeded once, at the
  panel's arrival, as *everything before today is read for everyone*, so it starts at zero and
  means what it says from now on. Never a number in the header; a tab count only.
- **Open** = the Open state. A tab count; never a prompt.
- **News** (a reply where you took part, a resolution, a done ask) = the bell, marked read by
  opening; never needs-you.
- Resolving a conversation with an ask to the opener ("confirm") is the pattern for "I answered,
  now read it": it leaves Open at once, and the opener is prompted once, by the ask.

## 4. The eleven cases, one line each

| Rian's case | What you do | What the other person sees |
|---|---|---|
| dutyfreeawards: answered again, wants Adam to see it and it closed | Resolve, Done, the answer as the closing word; Ask Adam "confirm you have seen this" | Needs you: one ask; Got it closes it; Reply keeps it resolved and rings you; Reopen if he disagrees |
| cruise ports: discuss, but not in scope | Resolve, **Later** ("after the soft launch"); Ask Adam "confirm the deferral" | Listed under Later, not Open; the conversation continues; Adam's Got it closes the ask |
| whiskey example: Adam is asking Mark | Adam mentions @mark, or you Ask Mark "your view" | Needs you for Mark; Done with a word when he answers |
| the 19 airports + the Heathrow mockup in one comment | Quote the mockup part into a new topic; answer the list; Resolve it Done | Two conversations, each with its people |
| price charts: discussed, not for the soft launch | Resolve, Later ("a later release") | Findable under Later; not an open issue |
| URL structure: agreed | Resolve, Done, the conclusion as the closing word | In the decisions log; Archive once built |
| brand pages: concluded, then Mark added more | Nothing: his reply rings you as news; Reopen if it changes the outcome | The status line under a resolved card says exactly that |
| 700ml vs 70cl: recommended, Mark silent | Ask Mark "confirm", or wait for his Got it | One tap for Mark |
| three URL decisions, now built | Three asks to Rian ("build: …"), each Done when built; then Archive | Each ask is one implementable item, on the thread, no task system |
| "have you responded to my mission?" | Link or Quote a comment; an own-site comment link renders as "Adam's comment, 7 Sep" | Everyone can say which comment they mean |
| 59 unread, 66 open | The one-time read seed; Needs you leads; Later and Archive drain Open | Adam and Mark open the panel to what needs them, not to everything |

## 5. What is deliberately not built

No priorities, no due dates, no assignees beyond an ask, no task board, no reactions beyond Got
it, no per-thread watchers or mute, no separate decisions table (the closing word is the
decision), no automatic resolution or expiry. Each of these has been asked of every tool of this
kind and each is where the consistency goes.

## 6. Build order (each step small, deployable on its own, staging first)

1. **The seed and the lead** (no migration): `backfill thread_reads_seed` (everything before
   today read for everyone; idempotent, inserts only where no row exists); the panel opens on
   Needs you when it has anything; the subtitle leads with needs-you; the status line under a
   resolved card ("Resolved by Rian, 14 Sep: … Reply to continue; Reopen if that changes it").
2. **Outcome and the wider resolve rule** (`threads.outcome` done|later, nullable; the Later tab;
   anyone in the conversation may resolve or reopen).
3. **Asks** (`thread_asks`: thread, for, note, by, at, done_at, done_by; routes ask / done; the
   chip and the list on the card; `turn` on ask, `status` to the asker on done; the Needs-you tab
   and the digest read asks; the follow-up mark of 0.48.0 becomes the first ask and its columns
   go in a later schema-only migration).
4. **Got it** (`comment_acks`: comment, account, at; one route; the line under the comment;
   completes open asks for the person on that thread).
5. **Tidying** (curators): Move to… and Quote into a new topic on a comment (the move write
   exists); Link and Quote on every comment; own-site comment links rendered by author and date;
   Archive with Show archived; the decisions log tab.
6. **The standard**: fold §2 and §3 into the Interaction Standard (states and outcome in §4.1,
   asks and acknowledgements as the standard's shapes, the counts rule in §6) and into the pack
   (the resolved style, the status line, the ask chip), so caddie and the next app inherit it.

## 7. What rian decides (defaults stated; the build proceeds on them unless he says otherwise)

- **Later as an outcome of Resolve** (default: yes), rather than a fourth state or an ask to
  oneself: one chip, one tab, one place.
- **Who may resolve** (default: anyone who took part, or a curator).
- **The read seed** (default: everything before today is read for everyone, once).
- **The verb for the hand-off** (default: "Ask"; the button reads "Ask someone…"; the done
  button reads "Done").
- **Archive** stays a curator's verb (default: yes); Adam and Mark resolve, rian puts away.
