# Row 93 round 1: correction and follow-ups after Dewey's approval Dewey approved round 1 on manifest `072abae8aa85ba442a3dabd20c337efc1ef33dedea2b98de72f5801cb96ee42e` (#1587 comment 28196, rev 939). This file sits outside the packet so `r1/build.md` (`b7ff8e06`) keeps the hash Sage is reviewing. ## Correction to r1/build.md L170 says the git-socket loop test covers "the PM's close". It doesn't. `packages/cli/tests/git-socket.test.mjs` has no `task.close` call. The close check is tested in `packages/bus/tests/review.test.mjs` ("task.close on a pushed task needs ...") and `packages/tasks/tests/verbs.test.mjs` ("a task with pushed work closes only citing ..."). If there's a round 2, its build.md fixes the line. ## Follow-ups from Dewey's notes (none block) 1. Untested refusals: `not-a-role`, `host-closing`, `git-busy`, `root-unreadable`, `unknown-project`. Each is a one-call test. 2. `run()` kills git with SIGKILL on timeout, so git never removes its lockfiles. A stale `refs/heads/.lock` blocks later pushes until an operator removes it. It fails closed. Fix: SIGTERM, a grace period, then SIGKILL, or a stale-lock sweep under the repo lock. 3. `HAVE_MAX=32` counts across all refs, not per ref. It works today because `origin/HEAD` sorts first. 4. The repo lock is in-process, so it assumes one launcher per dataRoot. A README line should say so. 5. `recordPush` checks the project against the business, not against the task's own project. This goes with the assignee check already listed in build.md's Limits. 6. The timeout mismatch is already in build.md's Limits and the harness README. If Sage's review asks for a round 2, items 1 and 4 are small enough to fold in. Items 2, 3 and 5 suit a follow-up row.