# Checklist for the next session Tick each line. Nothing after the first unchecked line should be started early. ## Before you start - [x] Paperclip answers: `curl -s -H "Authorization: Bearer $PAPERCLIP_BOARD_KEY" http://127.0.0.1:3100/api/health` → 200. - [x] Go is installed: `go version` → `go1.26.5` from `~/.nix-profile` (2026-11-10). The NixOS config change is staged but not rebuilt; see `docs/ENVIRONMENT-FACTS.md`. - [x] You are using the **user** key (`PAPERCLIP_BOARD_KEY`), not the agent key. ## Milestone 1 — one task, really run (no interface) — PASSED 2026-11-10 - [x] Read `docs/ENVIRONMENT-FACTS.md` for the company id, agent ids and toolchain facts. - [x] Make a sandbox project (payload in `docs/PAPERCLIP-API-NOTES.md`) with two tasks, the second blocked by the first. → `spike-2026-11-10`, `AUD-159`, `AUD-160` (`AUD-160` blocked by `AUD-159`). - [x] Assign the first task to `Builder`. The assignment alone woke it in 0.1 s; `heartbeat/invoke` was not needed. → wake `source=assignment`, run `aae77e89-…`. - [x] Watch: the task goes `todo` → `in_progress` → `done` (00:01:25 → 00:01:53). - [x] Confirm a comment written by Pi holds what it did. → commit `b093301`, comment `822f2924-…`. - [x] Confirm the cost appears: `GET /api/issues/{id}/cost-summary`. → 1 cent, run count 1. - [x] Confirm where the work happened. → **No worktree.** Paperclip ran it in `/tmp/pc-sandbox-2026-11-10` on `main`, because `enableIsolatedWorkspaces` is off on this instance. See `docs/ENVIRONMENT-FACTS.md`. PASSED, with one correction to the plan: the per-task worktree is not free — it needs an instance-wide experimental flag turned on by the person. The second task was left `todo` and unassigned. The `issue_blockers_resolved` wake has not been measured. ## Milestone 2 — task tree and reply box - [x] Create the Go module in `tui/`. → `tui/`, module `paperclip-harness/tui`, Bubble Tea + Lipgloss + BubbleZone. `go build ./...` and `go vet ./...` are clean. - [x] Screen 1 reads tasks for one project; blockers read **per task** (`/api/issues/{id}/diagnostics/blockers`), never from the list. → seen in a real terminal: `TODO (1) / BLOCKED (1) / DONE (2)`, with `[AUD-161 todo]` shown against the blocked task. Resize shows "too small" below 56×12 instead of a broken tree. - [x] Screen 4 shows the thread and posts a reply with the user key. → `bin/screen reply AUD-162` shows the conversation; typing and pressing Enter posts, and `s` picks a status to send with it. Posted as `authorType: user`. - [x] Pass: move a blocked task forward from the terminal, no browser, no shell. → `AUD-162` went `blocked` → `todo` from the reply screen, with a comment, and the activity record names the person. Verified against the API afterwards. ## Milestone 3 — add a task, watch it work - [x] Screen 2 creates a task with a blocker and the command that decides it is done. → `AUD-163` and `AUD-164` made in the form; `AUD-164` blocked by `AUD-163`, and the verify command landed in the task's own description. - [x] Screen 3 shows the running log and the diff from the task's worktree. → seen live: `running · assignment`, the worktree path and branch, `?? NOTES.md` while the agent worked, then `754cdb5`, `NOTES.md | 3 +++` and the diff. - [ ] Pass: a two-task plan is created, ordered and finished from the terminal alone. Created and ordered from the terminal, and both tasks are `done` — but **not by the intended path**. Nothing merges a task's branch, so `AUD-164`'s worktree was cut from `main`, which has no `NOTES.md`; the agent read the file across branches with `git show AUD-163-…:NOTES.md` instead. That is what Milestone 5 exists for. ## Milestone 4 — the project layer - [x] Adopt a folder as a project; remember which host it is on. → `bin/office ` writes `/.harness/harness.toml` (session, project, machine, folder, task watched) and builds the pages. Re-running changes nothing. - [x] Build the page layout; repair it; reset it. → `bin/board` adopts or creates each page and places them on workspaces 1–5 in order; `--replace` rebuilds from nothing; `bin/project-reset` removed the panes, three worktrees and three branches, and `bin/office` built them all back. - [ ] Pass: a project on another machine can be opened and used from here. **Not tested.** This pane runs on .13 and I have no way to drive .27 or .51 from here; `bin/office --host` and the runbook command for it are written but unproven. ## Milestone 5 — review and merge - [x] `ocr` runs over the diff; a failing review refuses the task. → `AUD-165` added a `cleanup.sh` with `rm -rf "$HOME/tmp"`; `bin/merge --check` refused with exit 5 and named the critical finding, and `cleanup.sh` never reached `main`. - [x] Merges are one at a time, re-checked after each. → a second merge while one holds the lock exits 6; after the rebase the task's verify command runs again, and again on the base branch after the merge. - [x] Pass: the next task cannot merge until the first is settled. → the lock refuses the second merge outright, and a refusal leaves the branch where it was. ## Interface rules that are not optional - Handle the window-size message; never hardcode sizes; show "too small" instead of a broken layout. - Run in the alternate screen. - In TUIOS window mode, `h j k l`, `z`, `n` belong to TUIOS: use Tab, Shift-Tab, arrows, Space, Enter inside the app, and keep a bare Esc free to close a box. - Create the click-zone manager once and wrap the whole view. - No network or git work inside update or view — use commands that return messages. ## The interface, 2026-11-10 - [x] Board, Work, Conversation, Author, Project and Repair workspaces built and running in the `paperclip-harness` session, one pane each, on workspaces 1 to 7. - [x] One frame, one palette, one footer everywhere; `tui/frame_test.go` fails if any panel line is not exactly the width asked for. - [x] Choosing a task drives every workspace through the project's own file. - [x] Nerd Font installed on .13 by the person; Ghostty points at it; the panels keep plain Unicode unless `-nerd` is given, because a private-use glyph does not survive TUIOS's screen capture and could not be verified from here. - [ ] A TUIOS theme is set in the config (`catppuccin_mocha`) but a running session needs a restart to pick it up.