Lab

Review board

Daily driver

Turns any markdown plan into a local page where I select text or a block, tag it, and send every note back as one round.

Move image uploads to a queue Round 1 Submit 3 notes
Move image uploadsCache key auditRetry budget

Proposal

Uploads stop blocking the request. The API stores the file, returns an id, and puts a job on the queue. Workers resize every image to three sizes in the same process. The page polls until the job reports done.

Retries

A failed job is retried a few times before it lands in the dead letter list. Who clears that list is not decided.

Round one: I select a sentence, tag it with an intent and a note, and the sidebar collects every note until I submit the batch. Mockup with sample data.
Move image uploads to a queue Round 2 Approve
DocumentHistory

Proposal 3 edits

Uploads stop blocking the request. The API stores the file, returns an id, and puts a job on the queue. Workers resize every image to three sizes in the same process. Resizing runs in a separate worker pool, so a burst of large images cannot starve small jobs.

Retries

A failed job is retried 5 times with exponential backoff, then moves to the dead letter list. A nightly job reports its size.

Monitoring new section

Queue depth and oldest job age are exported and alerted on.

Round two: sections that changed carry an edits badge, the old sentence stays visible struck through, and History lists what happened to each note. Mockup with sample data.
Documentsagent listening
Move image uploads to a queueyour turnround 2, 3 edits
Cache key auditagent workinground 1, 5 notes sent
Retry budgetapprovedround 3, saved
The documents page: every plan from every chat in one place, each card showing whose turn it is. Mockup with sample data.

How it works

plan.md board pageselect and tag one roundall notes agentapplies next round with dispositions
  1. A plan becomes a page. The server renders the markdown, diagrams included, and adds it as a tab next to every other document.
  2. I select and tag. A text span or a whole block gets one of six intents (wrong, refine, unclear, expand, remove, question) and a note.
  3. The batch goes back as one round. The agent applies every item and writes a disposition for each: applied, partial, rejected or needs clarification.
  4. The next round marks what changed. Sections are matched by heading first, so a large insert does not mark everything as new.
  5. Someone has to be listening. The agent sends a heartbeat every 10 seconds. If nobody does, the board starts a headless applier, one per event and at most two, but an approval to implement never runs unattended.

Built with

Decisions