Owner: Camila Duarte. Status: draft. Replaces the nightly CSV export.
Nightly CSV exports land after finance has closed the day, and late rows are simply missing. This RFC replaces that file with one append-only log. The CSV job becomes a reader. It stops being the source.
Today
Each service writes its own nightly file, on its own clock. A late file is missing rows.
Finance re-runs the export by hand when a file is short. That re-run is how they notice.
Nobody can replay a single account without rebuilding the file from the first of the month.
Proposal
Services append events to one log. Consumers read from an offset and resume after a restart.
A bad event is corrected by a new event, never by editing history. The log has no update.
Finance export retention is thirty days.
The CSV job reads the log each morning and writes the file finance already knows.
Alternatives
Rejected options: none recorded.We rejected a separate bus because the team would have to run it. The team would own the broker, the disk, and the on-call.
A second database was sketched and dropped. Two stores will drift the first time a write fails.
Ordering across services is out of scope. One writer per service, and no global sequence.
thirty days
Wen Zhao
Is thirty days of retention enough for the finance export?
Tomás Ibarra
Finance asked for ninety. I want that called out before we lock the proposal.
Rejected options
Tomás Ibarra
@agent add the option we rejected and why.
agent
Added the rejected bus option and the reason we skipped it. Leaving the thread open so you can check the wording.
Start with @agent to ask the agent
ResolveReply
Fictional example: a Cobaltfern Analytics event-log RFC in Gander, with a peer thread and a scripted agent connect reply.
How design docs get reviewed today
RFCs often start as a doc paste or a long message. That works for comments on a frozen draft. It works less well when the agent is still editing the file that has the rejected alternatives in its context.
A meeting gets the architect and two peers in one room. It does not keep the thread attached to the paragraph. An early PR reviews the diff, not the decision, and it asks the founder of the idea to commit a draft.
The RFC, reviewed while the research is still warm
Camila Duarte asks her agent to draft an RFC for Cobaltfern Analytics: replace nightly CSV exports with an append-only event log. The agent writes rfcs/0042-event-log.md. Camila runs gander watch and sends the link to Tomás Ibarra and Wen Zhao.
Wen highlights the retention line and asks whether thirty days is enough for the finance export. Tomás replies in that thread. The agent is not on that conversation.
Tomás opens a second comment: "@agent add the option we rejected and why." The session that explored the alternatives edits the RFC, replies, and leaves the thread open so Wen can read the wording. The link Camila sent is the one that updates. The RFC goes to the repo when the review is done.
Who's in the doc
WriterPeer engineerArchitectThe author's agent
Writer Runs the agent and sends the link. Still the only install.
Peer engineer Looks for the decision, the rejected option, and the missing risk.
Architect Checks that the proposal matches how the system actually runs.
The author's agent Still has the alternatives it explored. Edits when a peer uses agent connect.
Reviewers only need a browser. Talk to each other in normal threads. Use agent connect when you want the draft changed.
Agents that fit design docs and rfcs
Claude CodeThe RFC can live under ./plans or rfcs, and MCP brings agent connect back to the session.
CodexCodex drafts the doc next to the repo. The MCP table carries agent connect.
CursorPeers comment on the link. The authoring session is the one with the repo open.
OpenCodeA terminal agent writes the RFC. Agent connect returns through its MCP entry.