Public: anyone can read this; the crew can change it.
Migrated from github.com/Trevato/SO-ARM100
Direction: Unstick only - the owner does not want forward planning here. When an issue is stalled, parked twice or at its run cap:… #86
Unstick run, 2026-10-21. Fewer than 8 are startable, and that is the direction: no new scope.
- #49 is split into #90 (portrait shell) and #91 (one STOP), both ready, plus #92 (drive sheet) and #93 (landscape), which wait on #90 and #91. #50 and #51 now wait on #90.
- #54 is split into #87 (camera over a WebSocket, already taken), #88 (server metrics, ready) and #89 (viewer metrics + Admin Health, waits on #87 and #88). #70 now waits on #87.
- #58 is split into #94 (taken), #95 and #96, which are mechanical module moves.
- Pull #25 has one concrete change for its next round (bench/launch-check.ts). I could not close it while #20 is open.
- #12 is already done on main in 5d4fef3 (#45), and the note is on it. My close as done was refused (scope), so a person needs to close it. That also frees #13 moderation, and with it #14 and #20.
Startable now: #88, #90, #91, #95, #96. Everything else on the owner's roadmap waits on these or on #12 being closed.
I re-planned the four stuck issues and the stuck pull, but only 5 issues can start now instead of 8, and #12 still needs a person to close it. The shortfall is because the direction allows no new scope; I explained it in a comment on #86. Nothing was pushed: this run only changes the map.
Opened, in order:
- #87: the camera reaches the browser over a WebSocket, latest frame wins (from #54). A builder has already taken it.
- #88: the app's own numbers at
/metrics.promplus a one-line log each minute (from #54). Ready. - #89: each viewer reports round trip, fps and frame age, shown under Admin → Health (from #54). Waits on #87 and #88.
- #90: mobile portrait shell (from #49). Ready.
- #91: exactly one STOP on every layout (from #49). Ready.
- #92: mobile drive sheet with two snap points (from #49). Waits on #90 and #91.
- #93: mobile landscape overlay (from #49). Waits on #90 and #91.
- #94: relay's
/adminroutes move tosrc/admin-routes.ts(from #58). Already taken. - #95: the queue, join and chat script moves to
src/ui/lobby-panel.js(from #58). Ready. - #96: the metrics panel script moves to
src/ui/metrics-panel.js(from #58). Ready. - #97: a repeatable launch check. I opened it, then closed it as dropped because it repeated pull #25's work.
What happened to each stuck item:
- #49, #54, #58: closed as split into the issues above, with a comment on each saying what the new pieces do differently. #49's two parks were the preview deploy dying, not the change; the 6-core bump in 8190a91 should fix that. #50 and #51 now wait on #90, and #70 now waits on #87.
- #12: this work already landed on main in 5d4fef3 (#45). I left that note on it, but closing it as done was refused for lack of scope. Until a person closes it, #13 stays blocked, and with it #14 and #20.
- Pull #25: I couldn't close it while #20 is open. Its frame cap is already on main from #78. I gave it one concrete change for its next round: rebase, then add
bench/launch-check.ts <url>. It walks a stranger's path (watch, join, queue, drive, STOP) and runs against its own preview. My first comment there said I was closing it; a second comment corrects that.
Ready now: #88, #90, #91, #95, #96.
🤖 Generated with Claude Code
Unstick run 2, 2026-10-21. Startable now: #95, #96 and #109, which is 3, not 8.
- #88 is split into #109 (a pure metrics module with unit tests only) and #110 (wiring and /metrics.prom). #110 waits on #109, and #89 now waits on #110.
- Pull #25: the one concrete change from the last run still stands (bench/launch-check.ts). Its branch has not moved.
What holds the rest:
- #12 is already done on main in 5d4fef3, and #50 in 058825d. Both have the note, but I do not have the scope to close them. A person closing #12 frees #13 moderation, then #14 and #20.
- #87, #90, #91 and #94 are taken by builders. The mobile pieces #92 and #93 wait on #90 and #91.
- Every recent park (#49, #58, #88) was the preview deploy failing in the place it ran, not the change. That is infrastructure, and only a person can fix it.
The direction forbids new scope, so I have not padded the reserve.
I split #88 into two smaller issues and gave pull #25 another round. Only 3 issues can start now instead of 8, and I explained why in a comment on #86. Nothing was pushed: this run only changes the map.
Opened, in order:
- #109:
src/live-metrics.tson its own, with rolling counters, p50/p95, Prometheus text and a summary log line. It is a pure module checked only by its own unit tests, with no route or page. Ready now. - #110: the relay feeds that module and serves
/metrics.promplus a log line each minute. Waits on #109.
Re-planned:
- #88: closed as split into #109 and #110, with a comment saying what changed. Both of its parks were the preview deploy failing in the place it ran, not the change itself. #89 now waits on #110 instead of #88.
- Pull #25: I can't close it while #20 is open, so I commented again confirming the change from last run still stands. The one change is: rebase onto main, then add
bench/launch-check.ts <url>, tested against the fake server and run against its own preview. Its branch hasn't moved since that comment.
Ready now: #95, #96, #109.
Why there are fewer than 8:
- Done but still open: #12 is already on main in 5d4fef3 and #50 in 058825d. Both now carry that note, but my credentials can't close them, so a person has to. Closing #12 frees #13 (moderation), and after it #14 and #20.
- Taken: builders hold #87, #90, #91 and #94. #92 and #93 wait on #90 and #91.
- Preview deploys: every recent park (#49, #58, #88) was the preview deploy failing where it ran, not the change. Only a person can fix that.
- No padding: the direction allows no new scope, so I didn't invent work to fill the reserve.
🤖 Generated with Claude Code
Unstick run 3, 2026-10-21. Startable now: #95, #96, #112 and #113, which is 4, not 8.
- #90 is split into #112 (pinned video + status strip) and #113 (bottom tabs).
- Pull #25 has the same one concrete change. Its head has not moved.
What holds the rest:
- Nothing has merged since 8190a91. Every park in the last runs (#49, #58, #88, #90) was the preview deploy failing in the place it ran, not the change. Splitting cannot fix that; a person has to look at the preview deploy.
- #12 (done on main in 5d4fef3) and #50 (done in 058825d) still need a person to close them. #12 holds #13, and #13 holds #14 and #20.
- #87, #91, #94 and #109 are with builders. The rest waits on them.
The direction forbids new scope, so I have not padded the reserve.
Splitting can't fix the main blocker: nothing has merged to main since 8190a91, because every recent pull was lost when its preview deploy failed where it ran, not in its code. That happened on #49, #58, #88 and #90, and a person needs to look at the preview deploy.
This run I split #90 and gave pull #25 another round. Four issues can start now, short of the 8 asked for; the reasons are in a comment on #86. Nothing was pushed: this run only changes the map.
Opened, in order:
- #112: on a phone held upright, the video stays pinned at the top with its 16:9 box reserved so nothing jumps, with one status strip under it. Styles go in a new
src/ui/mobile.css. - #113: on a phone held upright, a bottom tab bar (Drive / Queue / Chat, plus Mod for admins) shows one panel at a time. Its logic sits in
src/ui/tabs.jswith a unit test.
Both can be built at the same time.
Re-planned:
- #90: closed as split into #112 and #113, with a comment on it. Its main checks are now unit tests rather than a browser run. #50 and #93 now wait on #112; #51 and #92 now wait on #113.
- Pull #25: I still can't close it while #20 is open, so I commented again with the same one change for its next round: rebase onto main and add
bench/launch-check.ts <url>. Its branch hasn't moved since the last run. A person could close it instead.
Ready now: #95, #96, #112, #113.
What holds the rest:
- Done but still open: #12 (on main in 5d4fef3) and #50 (on main in 058825d) need a person to close them. #12 holds up #13, and #13 holds up #14 and #20.
- Taken: builders hold #87, #91, #94 and #109.
- No padding: the direction allows no new scope, so I didn't add work to fill the reserve.
🤖 Generated with Claude Code
Unstick run 2, 2026-10-21. After this run 7 issues can start, one short of 8, because the direction adds no new scope.
- #94 (parked twice) is split into #121 and #122. #122 waits on #121. Both parks were the deploy, not the code: forge.json health is /status, and it is 503 until the Pi arm answers, so every preview fails while the Pi is offline. #120 adds a /healthz that does not need the arm and points forge.json at it. This unsticks every pull, not only this one.
- Pull #25 (three change requests) could not be closed: refused. It is re-scoped to #123 (the /live 4096-byte cap with boundary tests) and #124 (lobby security tests), and the comment there gives the change. #125 is the scriptable launch check of a deployed URL. It waits on #120 and #123. #20 now waits on #123, #124 and #125. The signed-in run on the real arm with screenshots is for a person.
- #12 still needs a person to close it as done in 5d4fef3. That would free #13, #14 and #20.
New issues that can start now: #120, #121, #123, #124. Together with #95 and the issues already taken, the rest of the owner roadmap waits on these.
I closed #94 as split and opened six new issues. Pull #25 is still open, because closing it was refused (forbidden), so I left one concrete change on it for the next round. After this run 7 issues can start, one short of the 8 asked for. I explained why in a comment on #86: the direction allows no new scope.
Why #94 kept failing: neither park was the code. Both previews failed because forge.json uses /status as the health check, and /status answers 503 until the Pi's arm (100.89.95.68:8101) has answered once. So any preview fails whenever the Pi is offline. #120 fixes that for every pull, not just this one.
Opened, in order:
- #120: a new
GET /healthzanswers 200 without contacting the arm, andforge.jsonuses it as the health check. Ready. - #121: the
GET /adminpage moves intosrc/admin-routes.ts, with no behaviour change (first half of #94). Ready. - #122: the
POST /adminactions move into the same file (second half of #94). Waits on #121. - #123:
/livecloses any text frame over 4096 bytes with 1009, with tests at 4096 and 4097 bytes (the reviewer's ask on #25). Ready. - #124:
src/lobby.security.test.tsfrom #25, landed on its own. Ready. - #125:
bench/launch-check.tschecks a deployed URL as an anonymous visitor and prints pass or fail for each item. Waits on #120 and #123.
What happened to the two stuck items:
- #94: closed as split into #121 and #122, with a comment on it saying why.
- Pull #25: the comment on it asks for one change: make it the pull for #123 and #124, add the boundary tests, and change "Closes #20" to "Closes #123, closes #124".
- #20: stays open and now waits on #123, #124 and #125. The signed-in run against the real arm, with screenshots, needs a person.
- #12: a person still needs to close it, since it is already done on main in 5d4fef3. That would free #13, #14 and #20.
Ready now: #120, #121, #123, #124 and #95, plus the issues already assigned.
Nothing was pushed; this run only changed the map. I suggest no assignees, since a person assigns.
🤖 Generated with Claude Code
The two parked issues are re-planned, and 8 issues can start now, which meets the reserve. Pull #25 is still open, because closing it was refused last run, so I left one more concrete change on it. Nothing was pushed: this run only changed the map.
Why #91 and #109 failed:
- #109: both tries died on the preview deploy, not the code. The health check was
/status, which answers 503 while the Pi is offline. Main fixed that in 044b88b (the health check is now/), so it should deploy once it is built from current main. - #91: pull #101 died the same way. Pull #104 went red on the test step. That pull also left the Playwright viewport test undone, because the repository has no browser tooling.
Opened, in order:
- #127: replaces #109. The same
src/live-metrics.tsmodule and its unit tests, to be built from current main. Ready. - #128: from #91. STOP is at least 56 px tall and red, the stopped banner spans the full width, and the whole test suite must pass. Ready.
- #129: from #91. A test, with no browser, that the page has exactly one STOP, that no layout rule hides it, and that it fires on pointerdown. Ready.
One STOP, pointerdown and the two-tap resume are already on main, so #128 and #129 cover what is left. The Playwright test is left out, because it would mean adding a browser dependency.
What happened to each stuck item:
- #109: closed as replaced by #127. #110 now waits on #127.
- #91: closed as split into #128 and #129. #92 and #93 now wait on both instead of #91.
- Pull #25: the comment asks the builder to drop the
/livecap from the branch, since #123 is already in work on it. That leaves onlysrc/lobby.security.test.ts, and the pull would close #124 instead of #20.
Ready now: #121, #124, #127, #128, #129 and #95 have no assignee. #12 is ready too and is assigned to smith. A person still needs to close #12 as done in 5d4fef3.
#120 (the /healthz route) is now mostly covered by 044b88b, since main's health check no longer needs the arm. I left it alone because smith's pull #126 is in flight for it; you may want to close one or the other.
Unstick run 4, 2026-10-21. Startable now: 2 (#136 and #138, and #138 is already taken), not 8. The rest is held by 12 open pulls waiting on their checks, not by the plan: #115, #116, #118, #126, #130 to #135. Each one that lands frees what waits on it: #50, #51, #92, #93, #110, #122, #125, #139, #140. Splitting their issues again would only race the pulls already in flight, and the direction adds no new scope.
- #12 is split into #136 (test: admin settings survive a relay restart, ready) and #137 (non-admins get 404 on /admin, waits on #121 and #122). The rest of #12 is on main in 5d4fef3. #13 now waits on #136.
- #87 (run cap) is split into #138 (fan-out module), #139 (WS route, waits on #138) and #140 (page, waits on #139). #70 and #89 now wait on #140. Closing pull #103 was refused, and the comment on it says to take its code piece by piece.
- Pull #25: a planner may not close it while #20 is open. The comment on it asks the builder to say it is superseded by #130 and #134, so a writer can close it.
I re-planned #12 and #87 into five new issues, #136 to #140, but only 2 can start now instead of 8, and one of those is already taken. The rest are held by 12 open pulls waiting on their checks, so splitting their issues again would only race work in flight. I explained this in a comment on #86. Two closes were refused, so pulls #103 and #25 stay open with a comment each. Nothing was pushed: this run only changed the map.
Opened, in order:
- #136: a test that admin settings and moderators survive a relay restart on the same data directory (from #12). Ready.
- #137: anyone who is not the owner or a moderator gets 404 on
GETandPOST /admin; main answers 401/403 today (from #12). Waits on the/adminmove, #121 and #122. - #138:
src/camera-socket.tssends each camera frame to every viewer, and a slow viewer skips to the newest frame instead of queuing. It is a module and its tests only, with no route (from #87). Ready, and a builder has already taken it. - #139: the relay serves
/camera/<id>/wsfrom the shared feed, and the offline picture when the Pi camera is down (from #87). Waits on #138. - #140: the page's
src/ui/video.jsdraws from that socket and reconnects after 2 s without a frame (from #87). Waits on #139.
What happened to each item:
- #12: closed as split into #136 and #137. Most of it is already on main in 5d4fef3, which is likely why a builder left it without a pull. Closing it as done is beyond my scope, so the new issues cover only what main still lacks against the owner's spec. #13 now waits on #136.
- #87: closed as split into #138, #139 and #140, because the whole change hit its run cap in one pull. #70 and #89 now wait on #140.
- Pull #103: closing it was refused, even though #87 is now closed. The comment on it says to take its code one piece per pull and leave out its
forge.jsonhealth change, since main already uses/. - Pull #25: a planner can't close it while #20 is open. Its two halves already have their own pulls, #130 and #134. The comment asks the builder to drop "Closes #20" and mark it superseded, so someone with write access can close it.
Ready now: #136, and #138, which is taken. As the open pulls land, these become ready: #50, #51, #92, #93, #110, #122, #125, #139 and #140.
Unstick run 5, 2026-10-21. Startable now: 1 (#145, which replaces #125 and no longer waits on #120 or #123). That is not 8, because nothing has merged since 044b88b: 15 pulls are open and waiting on their check or a merge (#115, #116, #118, #126, #130 to #135, #141 to #143, plus #103 and #25). Every blocked issue on the map waits on one of those pulls: #50, #51, #92, #93, #110, #122, #137, #139, #140, #13 and #14. Splitting them again would race work already in flight, and the direction adds no new scope. What moves the board now is a person merging or closing pulls. Pull #25 is superseded by #130, #134 and #145 and can be closed; pull #103 is superseded by #138 to #140.
Only 1 issue can start now, not 8, because nothing has merged since 044b88b. 15 pulls are open and waiting on their checks or a merge, and every blocked issue on the map waits on one of them. Splitting those issues again would only race work already in flight, and the direction allows no new scope. I explained this in a comment on #86. What moves the board now is a person merging or closing pulls.
Opened:
- #145:
bench/launch-check.tschecks a deployed URL as an anonymous visitor and prints pass or fail for each item. It replaces #125 and can start now. #125 waited on #120 (/healthz) and #123 (the/livecap). Main's health check is already/, and #123 has its own tests, so the new version waits on neither.
What happened to each item:
- #125: closed as replaced by #145. #20 now waits on #145 instead.
- Pull #25: still open, because a planner can't close it while #20 is open. Everything the reviewer asked for now has its own issue and pull: #130 (
/livecap), #134 (lobby security tests) and #145 (launch check). The comment on it asks the builder to drop "Closes #20" and mark it superseded. Recommendation: a writer closes it now. - Pull #103: also superseded, by #138 to #140, and can be closed.
Ready now: #145. Nothing was pushed: this run only changed the map.
Unstick run 6, 2026-10-21. Startable now: 1 (#145). The forge had copied #125's blockers onto it when it was split, and I removed them. That is not 12, because nothing has merged since 044b88b: 15 pulls are open (#25, #103, #118, #126, #130 to #135, #141 to #143, #146, #147). Every other open issue on the map is either covered by one of them or waits on one: #13, #14, #50, #51, #70, #89, #92, #93, #110, #122, #137, #139, #140. The direction adds no new scope, and splitting issues that already have pulls would race them. What frees builders now is a person merging or closing pulls. Pulls #25 and #103 are superseded and can be closed.
Only 1 issue can start now, not 12, and I opened nothing new this run. Nothing has merged since 044b88b, so the map is held by 15 open pulls, not by the plan. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
- #145 (launch check): ready again. When I split #125 into it last run, the forge carried #125's blockers, #120 and #123, over to #145. I removed both links; its description already says it needs neither.
- Pull #25: still open, with the same one change restated in a comment: drop "Closes #20" and mark it superseded by #130, #134 and #145. A planner can't close it while #20 is open, so it will keep coming back to every planning run until a writer closes it.
- The rest of the map: every other open issue is either covered by one of the 15 open pulls or waits on one. The direction allows no new scope, and splitting issues that already have pulls would only race them.
What frees builders now is a person merging or closing pulls. Pulls #25 and #103 are both superseded and can be closed.
Ready now: #145.
Unstick run 7, 2026-10-21. Startable now: 0, not 12. #120 is dropped: main has served previews without the Pi since 044b88b, and nothing waited on it. Every other open issue already has an open pull or waits on one. 16 pulls are open (#25, #118, #130 to #135, #141 to #143, #146, #147, #149, #151, #152), and nothing has merged since 044b88b. The direction adds no new scope, so there is nothing to plan that would not race those pulls. Builders are freed by a person merging, or closing, pulls. Pull #25 is superseded and can be closed now.
No issue can start now, against a reserve of 12, and I opened nothing new. Every open issue already has an open pull or waits on one, 16 pulls are open, and nothing has merged since 044b88b. The direction allows no new scope, so anything I planned would only race those pulls. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
- #120: closed as dropped. Main has let previews deploy without the Pi since 044b88b, because the health check is
/. A separate/healthzroute would have nothing using it, and nothing waited on #120. The comment on it says why. - Pull #25: still open, because a planner can't close it while #20 is open. The comment restates the one change: drop "Closes #20" and mark it superseded by #130, #134 and #145. Nothing in it is left to review.
Ready now: nothing. What frees the builders is a person merging or closing the open pulls. Pull #25 can be closed now; until a writer closes it, every planning run will be handed it again.
Unstick run 8, 2026-10-21. Startable now: 9 unassigned (#13, #122, #157, #158, #159, #160, #161, #164, #165), plus #123 and #127, which are assigned and ready. That is not 12.
- Cause of this round of parks: forge.json, not the changes. The check block on main had no check.run, which broke every check until 1142ee6, and pulls that edited forge.json stopped merging. Every fresh issue says to branch from 1142ee6 or later and leave forge.json alone.
- #95 is replaced by #158, and #113 by #159 (#51 and #92 now wait on #159).
- #144 (owner TOP) is split into #160 (driver in /status), #161 (back out of a collision), #164 (refusal reasons shown), #165 (one-frame test), #162 (table setting, after #161) and #163 (admin table UI, after #162 and the /admin move).
- What holds the rest: open pulls awaiting merge, and the direction adds no new scope. Pull #25 is superseded and needs a writer to close it.
I re-planned the three parked issues into eight new ones (#158 to #165), and 9 unassigned issues can start now. With #123 and #127, which are assigned and ready, that is still short of the 12 asked for. I explained why in a comment on #86. Pull #25 stays open; a writer needs to close it. Nothing was pushed: this run only changed the map.
Why these were parked: none of the failures came from the changes themselves. Main's forge.json had a check block with no check.run, which broke every check until 1142ee6 removed it. Pulls #132 and #146 had also edited forge.json, so they stopped merging into main. Every new issue says to branch from 1142ee6 or later and leave forge.json alone.
Opened, in order:
- #158: replaces #95. The queue, join and chat script moves to
src/ui/lobby-panel.js. Ready. - #159: replaces #113. The phone portrait tab bar. #51 and #92 now wait on it. Ready.
- #160: from #144.
/statusnames who is driving, the owner included after a take-over. Ready. - #161: from #144. The safe zone never refuses a move that goes no deeper than where the arm already is. Ready.
- #162: from #144. A table-height setting,
tableOffsetMm, plusPOST /settings/table-here. Waits on #161. - #163: from #144. The table height and a "set the table here" button on
/admin. Waits on #162 and on the/adminmove (#121, #122). - #164: from #144. A refused move shows its reason on the page and in the Machine panel. Ready.
- #165: from #144. A test that a driver's move reaches the fake Pi within one frame. Ready.
Pull #151's branch can be reused for #160 and #161, and the old branches for #158 and #159.
What happened to each item:
- #95: closed as replaced by #158.
- #113: closed as replaced by #159.
- #144: the owner's top priority (the arm doesn't move when they have control). Closed as split into #160 to #165.
- Pull #25: still open with the same one change: drop "Closes #20" and mark it superseded by #130, #134 and #145. A planner can't close it while #20 is open.
Ready now (unassigned): #13, #122, #157, #158, #159, #160, #161, #164 and #165. The rest are held by open pulls waiting to merge, and the direction allows no new scope.
Unstick run 9, 2026-10-21. Startable now: 7 unassigned (#122, #148, #159, #160, #161, #164, #165), plus #112, #123 and #127, which are ready and assigned. That is not 12. Six pulls merged this round (#118, #133, #134, #135, #143, #149). Nothing was parked except pull #25. Its next round is re-scoped to #123 (the /live cap with boundary tests), which leaves #20 as only the person-run on the real arm. What holds the rest: each blocked issue waits on one of these ready issues or on an open pull (#141, #142, #166). The direction adds no new scope.
Only pull #25 needed re-planning this run, and I opened no new issues. It now has one concrete change for its next round. 7 unassigned issues can start, short of the 12 asked for, because the direction allows no new scope. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
Pull #25: six pulls merged since last run, including the lobby security tests (bafea10, #134) and the launch-check script (8efb73f, #149). That leaves one conflict on the branch, src/lobby.security.test.ts. The comment on #25 asks the builder to:
- rebase on main and take main's copy of that test file;
- keep the pull's
/liveframe cap insrc/lobby.ts, which is not on main, because #123's pull #130 closed without landing it; - add the boundary tests the reviewer asked for: a 4096-byte frame is accepted, a 4097-byte frame is closed with 1009, and the count is in bytes;
- change "Closes #20" to "Closes #123".
Once #123 lands, #20 is only the run on the real arm with bench/launch-check.ts, which needs a person.
Ready now (unassigned): #122, #148, #159, #160, #161, #164 and #165. #112, #123 and #127 are also ready but assigned. Everything else waits on one of these or on the open pulls #141, #142 and #166.
Unstick run 10, 2026-10-21. New: #168. Since b4a6aaa (#118), bun x tsc --noEmit fails on main, at src/ui/metrics-panel.js:11. I reproduced it on a clean worktree. Every builder's type check is red until #168 lands, so it comes first. Pull #25 now holds only the /live cap. Its comment asks for the boundary tests and "Closes #123". Startable now: 6 unassigned (#122, #148, #159, #160, #164, #168), plus #112, #123 and #127, which are ready and assigned. That is not 12, because the direction adds no new scope. What holds the rest: each blocked issue waits on one of these or on work in progress (#13, #139, #158, #161, pull #166).
Main's type check is broken. Since #118 (b4a6aaa), bun x tsc --noEmit fails at src/ui/metrics-panel.js:11, and I reproduced it on a clean copy of main. Every builder's type check stays red until it's fixed, so I opened #168 for it, and it can start now. The function there can return undefined where a string is required. The fix is to make it always return a string, without changing what it escapes.
Pull #25: the builder merged main, and the diff is now just three lines in src/lobby.ts: the /live frame cap, with no tests. It still says "Closes #20". The comment on it asks for one change:
- add the boundary tests to
src/lobby.test.ts: a 4096-byte frame is accepted, a 4097-byte frame is closed with 1009, and a 4096-character frame that is over 4096 bytes is also closed; - change "Closes #20" to "Closes #123";
- say in the description that the type-check error is on main and belongs to #168.
7 unassigned issues can start now: #122, #148, #159, #160, #164, #165 and #168. #112, #123 and #127 are ready too, but assigned. That's short of 12 because the direction allows no new scope; I explained this in a comment on #86. Everything blocked waits on one of these, on issues builders are working now (#13, #139, #158, #161), or on pull #166.
Nothing was pushed: this run only changed the map.
Unstick run 11, 2026-10-21. Nothing new was parked. #161 landed in 8d89036, which frees #162. Pull #25 has the same one change, restated. Startable now: 5 unassigned (#148, #160, #162, #164, #165), plus #112, #123 and #127, which are ready and assigned. That is not 12, because the direction adds no new scope and every other open issue is covered by work in flight. Pulls open: #166, #169, #170, #171 and #25. Being worked: #13, #122, #139, #158, #159 and #168. Each one that lands frees what waits on it (#14, #51, #92, #93, #110, #137, #140, #163).
Nothing new was parked this run, and I opened no issues. 5 unassigned issues can start now, short of the 12 asked for. The direction allows no new scope, and every other open issue is covered by work already in flight. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
- #162 (table height setting): now ready, because #161 merged in 8d89036.
- Pull #25: no push has come since my last comment, so I restated the same change. It needs boundary tests in
src/lobby.test.ts:
- a 4096-byte frame is accepted; - a 4097-byte frame is closed with 1009; - 4096 multi-byte characters are also closed.
The description must also say "Closes #123" instead of "Closes #20". Once that is pushed and green it can merge. If no builder takes it, a writer can close it, and #123 (assigned, ready) does the same work from main.
Ready now (unassigned): #148, #160, #162, #164 and #165. #112, #123 and #127 are also ready, but assigned.
The rest waits on open pulls (#166, #169, #170, #171 and #25) or on issues being worked (#13, #122, #139, #158, #159, #168). As those land, they free #14, #51, #92, #93, #110, #137, #140 and #163.
Unstick run 12, 2026-10-21. Nothing new was parked. #122 landed in 4dbea7b, which frees #137. Pull #25 is idle at 16722ff, and the same change is restated with exact frames. It needs a writer to close it if it stays idle. Startable now: 6 unassigned (#137, #148, #160, #162, #164, #165), plus #112, #123 and #127, which are ready and assigned. That is not 12, because the direction adds no new scope. The rest wait on work in flight: #13, #139, #158, #159 and #168 are being worked, and pulls #166, #170, #171 and #25 are open.
Nothing new was parked this run, and I opened no issues. 6 unassigned issues can start now, half of the 12 asked for, because the direction allows no new scope. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
- #137: now ready, because #122 merged in 4dbea7b. It changes
/adminso anyone who isn't the owner or a moderator gets a 404. - Pull #25: still idle at 16722ff, with no push since my last two comments. I restated the change with the exact test frames for
src/lobby.test.ts:
- 4096 ASCII bytes are handled and the socket stays open; - 4097 bytes are closed with code 1009; - 1366 three-byte characters (4098 bytes) are also closed with 1009.
Its description must also say "Closes #123" instead of "Closes #20". A planner can't close the pull, so if it stays idle a writer should close it, and #123 lands the same cap from main.
Ready now (unassigned): #137, #148, #160, #162, #164 and #165. #112, #123 and #127 are ready but assigned.
Everything else waits on work in flight: #13, #139, #158, #159 and #168 are being worked, and pulls #166, #170, #171 and #25 are open.
Unstick run 13, 2026-10-21. #112 (parked once) is replaced by #176, which is the same work from current main without the forge.json edit; #50 and #93 now wait on #176. Pull #25 is still idle and the change is restated. Main type-checks again (f728f93, #168). Startable now: 3 unassigned (#148, #165, #176), plus #13, #123 and #127, which are ready and assigned. That is not 12, because the direction adds no new scope. Everything else is being worked (#137, #159, #164), sits in an open pull (#172, #173, #174, #25), or waits on one of those.
I opened one issue this run, #176, and 3 unassigned issues can start now, far short of the 12 asked for. The direction allows no new scope, and the rest of the map is being worked, sits in an open pull, or waits on one. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
Opened:
- #176: replaces #112 (the phone portrait video pinned on top, with one status strip under it). It is the same work, built from current main and leaving
forge.jsonalone. Its old pull, #115, failed only on the oldforge.jsoncheck block that 1142ee6 fixed; its deploy and tests passed, so the code on that branch can be reused. Ready.
What happened to each item:
- #112: it was parked once, so I closed it as replaced by #176. #50 and #93 now wait on #176.
- #123 and #127: their pulls (#130, #131) failed the same
forge.jsonway, but neither issue is parked and both are still assigned, so I left them. - Pull #25: still idle at 16722ff. I restated the one change a fourth time: add the 4096/4097-byte and multi-byte boundary tests, and say "Closes #123" instead of "Closes #20". Main type-checks clean again (f728f93), so nothing else blocks it. A writer should close the pull if no builder takes it, since #123 lands the same three lines from main.
Ready now: #148, #165 and #176 are unassigned. #13, #123 and #127 are ready but assigned.
The rest is in flight: #137, #159 and #164 are being worked, and pulls #172, #173, #174 and #25 are open.
Unstick run 14, 2026-10-21. Nothing new is parked or stalled. #139 landed in 46c4128, and #140 is now being worked. Pull #25 is still idle; the same change is restated. Startable now: 2 unassigned (#148, #165), plus #13, #123 and #127, which are ready and assigned to smith. That is not 12. The direction adds no new scope, and every other open issue is being worked (#140, #164, #176), sits in an open pull (#173, #174, #175, #177, #25), or waits on one of those. Pulls landing will free #50, #51, #92, #93, #110 and #163.
Nothing is newly parked or stalled, so I opened no issues. Only 2 unassigned issues can start, short of 12, because the direction allows no new scope and everything else is already in flight. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
- Main moved: #139, the camera WebSocket route, landed in 46c4128. #140, the page half of the camera work, is now being worked.
- Pull #25: still idle at 16722ff, so I restated the same change. It needs three
/liveframe tests insrc/lobby.test.ts:
- a 4096-byte frame is accepted; - a 4097-byte frame closes with code 1009; - a 4098-byte multi-byte frame closes with 1009.
It also needs "Closes #123" instead of "Closes #20". A writer can close the pull instead, since #123 (assigned to smith) lands the same three lines from main.
Ready now (unassigned): #148 and #165. #13, #123 and #127 are ready but assigned to smith.
Everything else is being worked (#140, #164, #176), sits in an open pull (#173, #174, #175, #177, #25), or waits on one of those. As those pulls land, they free #50, #51, #92, #93, #110 and #163.
Unstick run 15, 2026-10-21. No change since run 14: nothing is parked or stalled, main has not moved past 46c4128, and pull #25 is still idle (change restated). Startable now: 3 unassigned (#148, #165, #178), plus #13, #123 and #127, which are ready and assigned to smith. That is not 12. The direction adds no new scope, and everything else is being worked (#140, #164, #176, #179) or in an open pull (#173, #174, #175, #177, #25). A writer merging or closing those pulls is what frees the rest.
Nothing changed since the last run, so I opened no issues. Only 3 unassigned issues can start, short of 12, because the direction allows no new scope. I explained this in a comment on #86. Nothing was pushed: this run only changed the map.
- The map: nothing is parked or stalled, and main has not moved past 46c4128. Everything else is either being worked (#140, #164, #176, #179) or sitting in an open pull (#173, #174, #175, #177 and #25).
- Pull #25: still idle at 16722ff, so it stays open with the same one change restated. It needs three
/liveboundary tests insrc/lobby.test.ts:
- 4096 bytes accepted; - 4097 bytes closed with code 1009; - a 4098-byte multi-byte frame closed with 1009.
It also needs "Closes #123" in the description. A writer closing the pull is the faster route, since #123 lands the same three lines from main.
Ready now (unassigned): #148, #165 and #178. #13, #123 and #127 are ready but assigned to smith.
A person merging or closing the open pulls is what frees the rest.
Unstick run 16, 2026-10-21. #160 and #162 landed (4eb94fb, 0ebf3bb), which frees #163. Nothing is parked or stalled, and pull #25 is still idle (change restated). Startable now: 3 unassigned (#148, #163, #165), plus #13, #123 and #127, which are ready and assigned to smith. That is not 12. The direction adds no new scope, and everything else is being worked (#140, #176, #179) or in an open pull (#175, #177, #180, #181, #25).
Only 3 unassigned issues can start now, short of the 12 asked for, so I left a comment on #86 saying why. Nothing is newly parked or stalled, so I opened no issues, and nothing was pushed: this run only changed the map.
- Main moved: #160 landed in 4eb94fb, so
/statusnames who is driving. #162 landed in 0ebf3bb, adding the table-height setting. That frees #163, the table height control and "set the table here" button on/admin. - Pull #25: still idle at 16722ff, so it stays open with the same change restated. It needs three
/liveboundary tests insrc/lobby.test.ts:
- 4096 bytes accepted; - 4097 bytes closed with code 1009; - a 4098-byte multi-byte frame closed with 1009.
It also needs "Closes #123" instead of "Closes #20". A writer could close the pull instead, and #123 lands the same cap from main.
Ready now (unassigned): #148, #163 and #165. #13, #123 and #127 are ready but assigned to smith.
The rest is in flight: #140, #176 and #179 are being worked, and pulls #175, #177, #180, #181 and #25 are open. The direction allows no new scope.
Unstick run 17, 2026-10-21. The three stalled issues are re-planned:
- #123 is replaced by #188 (pull #25 now points at #188).
- #127 is replaced by #189.
- #13 is split into #190 to #198. Ready now: #190, #191, #193 and #196. The other five wait on those.
Startable now: 6 (#188, #189, #190, #191, #193, #196). That is not 12. The pieces of #13 that touch the same lines of lobby.ts and chat.ts are chained rather than run in parallel, and the direction adds no new scope. Everything else is in an open pull or being worked (#140, #148, #159, #163, #165, #176, #178, #179).
I re-planned the three stalled issues (#13, #123, #127) into 11 new ones, and 6 of them can start now. That is half of the 12 asked for; I explained why in a comment on #86. Nothing was pushed: this run only changed the map.
Opened, in order:
- #188: replaces #123. The
/livecap is the three lines already on pull #25's branch, so this run only adds the boundary tests. Ready. - #189: replaces #127.
src/live-metrics.ts, restated as two new files with no route. Ready. - #190: from #13. Moderators, not just the owner, can remove messages, mute and ban, checked on the server. Ready.
- #191: from #13. Mutes can last 10 min, 1 h, 24 h or for good, and end on their own. Ready.
- #192: from #13. The mute length can be chosen over
/live. Waits on #190 and #191. - #193: from #13. Slow mode becomes an admin setting. Ready.
- #194: from #13. Slow mode is enforced in the chat. Waits on #191 and #193.
- #195: from #13. A ban ends the person's turn and drops them from the queue. Waits on #190.
- #196: from #13.
/adminlists every moderation action, with Unmute and Unban buttons. Ready. - #197: from #13. A removed message can be restored and reappears for everyone. Waits on #190 and #196.
- #198: from #13. A moderation menu on each chat line for the owner and moderators. Waits on #192.
What happened to each item:
- #123: closed as replaced by #188. #20 now waits on #188.
- #127: closed as replaced by #189. #110 now waits on #189.
- #13: too big for one run, which is likely why it stalled. Main already has a permanent mute, ban and unban, and message removal for the owner, so the pieces cover only what is missing. Closed as split into #190 to #198. #14 now waits on #190, and #20 on #192, #194, #195, #197 and #198.
- Pull #25: re-pointed at #188. The comment asks for the three boundary tests and "Closes #188", after which it can land.
Why only 6: the #13 pieces that edit the same parts of lobby.ts and chat.ts wait on each other rather than run in parallel. The direction allows no new scope, and everything else is in an open pull or being worked.
Ready now: #188, #189, #190, #191, #193 and #196.
Unstick run 18, 2026-10-21. Nothing new is parked or stalled. Pull #25 is now fully superseded by #199 (for #188) and needs a writer to close it. Startable now: 5 unassigned (#189, #190, #191, #193, #196). That is not 12. The direction adds no new scope, the remaining #13 pieces (#192, #194, #195, #197, #198) wait on those five because they share lines in lobby.ts and chat.ts, and everything else is in one of 9 open pulls (#177, #181 to #185, #187, #199, #25).
Only 5 issues can start now, short of the 12 asked for, and I opened no new issues. Nothing new is parked or stalled, so there was nothing to re-plan. I explained the shortfall in a comment on #86. Nothing was pushed: this run only changed the map.
Pull #25: fully superseded now. #188 (the /live cap and its tests) has its own pull, #199, so nothing on #25's branch is left to land. The comment asks for one last change: replace the description with "Superseded by #199; nothing to merge" and drop "Closes #20". A writer should then close the pull; a planner can't while #20 is open.
Why only 5: the direction allows no new scope. The remaining pieces of #13 (#192, #194, #195, #197, #198) wait on the five ready ones because they edit the same parts of lobby.ts and chat.ts. Everything else is in one of 9 open pulls: #177, #181 to #185, #187, #199 and #25.
Ready now: #189, #190, #191, #193 and #196.
Unstick run 19, 2026-10-21. Nothing is parked or stalled. #140 landed, which frees #70 (owner: real video). Pull #25 is superseded by #199 and waits on a writer to close it. Startable now: 5 unassigned (#70, #190, #191, #193, #196). That is not 12. The direction adds no new scope, the remaining #13 pieces wait on #190, #191, #193 and #196, and everything else is in an open pull (#177, #181, #184, #185, #187, #199) or being worked (#148, #189).
Only 5 issues can start now, short of the 12 asked for. Nothing was parked or stalled, so I opened no issues. I explained the shortfall in a comment on #86. Nothing was pushed: this run only changed the map.
- #70 (the owner's real video): now ready, because #140 landed.
- Pull #25: unchanged and fully superseded by pull #199 (for #188); nothing on its branch is left to land. The comment repeats the one change: replace the description with "Superseded by #199; nothing to merge" and drop "Closes #20". A writer should then close it.
The direction allows no new scope. The remaining moderation pieces from #13 wait on #190, #191, #193 and #196. Everything else is in an open pull (#177, #181, #184, #185, #187, #199) or being worked (#148, #189).
Ready now: #70, #190, #191, #193 and #196.
Unstick run 20, 2026-10-21. Nothing is parked or stalled. The /live cap landed (1e81d4c), so pull #25 has nothing left to land and only needs a writer to close it (a planner's close is refused). Startable now: 4 unassigned (#70, #191, #193, #196). That is not 12. The direction adds no new scope, the remaining #13 pieces wait on #190 (being worked), #191, #193 and #196, and everything else is in an open pull (#177, #181, #184, #185, #187, #200).
Only 4 issues can start now, short of the 12 asked for, and nothing was parked or stalled, so I opened no issues. I explained the shortfall in a comment on #86. Nothing was pushed: this run only changed the map.
Pull #25: its last piece is on main. The /live cap and its boundary tests landed in 1e81d4c (via #199), so the branch has nothing main lacks. Closing it was refused again: a planner can only close a pull whose issue is closed, and #20 is still open. The comment on it asks the builder to put "Landed in 1e81d4c; nothing to merge" in the description and drop "Closes #20". A writer needs to close it.
Why only 4: the direction allows no new scope. The remaining moderation pieces from #13 wait on #190 (being worked), #191, #193 and #196. Everything else is in an open pull: #177, #181, #184, #185, #187 and #200.
Ready now: #70, #191, #193 and #196.
Unstick run 21, 2026-10-21. Nothing is parked or stalled. #159 landed (df67db9), which frees #51 and #92. Pull #25 has nothing left to merge and needs a writer to close it. Startable now: 4 unassigned (#70, #92, #193, #196), plus #51, which is ready and assigned. That is not 12. The direction adds no new scope, the remaining #13 pieces wait on #190 and #191 (in progress), #193 and #196, and everything else is in an open pull (#181, #184, #185, #187, #200, #201).
Only 4 unassigned issues can start now, short of the 12 asked for, and nothing was parked or stalled, so I opened no issues. I explained the shortfall in a comment on #86. Nothing was pushed: this run only changed the map.
- The phone tab bar (#159) landed in df67db9. That freed #51 (mobile chat), which is assigned, and #92 (the mobile drive sheet), which is not.
- Pull #25: everything it carried is now on main, in 1e81d4c, bafea10 and 8efb73f. It stays open only because a planner can't close it while #20 is open. The comment asks the builder to note "Landed in 1e81d4c; nothing to merge" and drop "Closes #20". A writer needs to close it.
Why only 4: the direction allows no new scope. The remaining moderation pieces from #13 wait on #190 and #191 (in progress), #193 and #196. Everything else is in an open pull: #181, #184, #185, #187, #200 and #201.
Ready now (unassigned): #70, #92, #193 and #196. #51 is ready but assigned.
Unstick run 22, 2026-10-21. Nothing is parked or stalled. #181 landed (48b63e8). Pull #25 only merged main and still has nothing to land; it needs a writer to close it. Startable now: 4 unassigned (#70, #92, #163, #196), plus #51, which is ready and assigned. That is not 12. The direction adds no new scope, the remaining #13 pieces wait on #190, #191 and #193 (in progress) and #196, and the rest is in open pulls (#185, #187, #200, #201).
Only 4 unassigned issues can start now, short of the 12 asked for. Nothing was parked or stalled, so I opened no issues, and I explained the shortfall in a comment on #86. Nothing was pushed: this run only changed the map.
- Main moved: #181, the page control for the table height, landed in 48b63e8.
- Pull #25: the builder pushed 3099677, but it only merged main. The diff is now one stray line in
src/lobby.ts, left over after the cap landed in 1e81d4c, and the description still says "Closes #20". The comment asks the builder to drop that line and replace the description with "Landed in 1e81d4c; nothing to merge". A writer needs to close the pull, since a planner can't while #20 is open.
Why only 4: the direction allows no new scope. The remaining moderation pieces from #13 wait on #190, #191 and #193 (in progress) and on #196. The rest is in open pulls: #185, #187, #200 and #201.
Ready now (unassigned): #70, #92, #163 and #196. #51 is ready but assigned.
Unstick pass: #191 and #193 were each parked twice. Every preview deploy failed because bun test fails on main itself (the first-visit gzip budget, 51743 vs 51200, #211), not because of their changes. I replaced them with #213 and #214, which have the same scope and wait on #211, and moved #192 and #194 to wait on the replacements.
The reserve is 7 startable, not 12. This direction rules out new scope, and the rest of the owner's roadmap is already in the map, either in progress or behind open work. The next real unlock is #211: once it lands, #213 and #214 become startable and every preview can deploy again.
I replaced both twice-parked issues, so neither is stuck any more. Only 7 issues are startable now, short of the 12 the reserve asks for, and I explained why in a comment on #86.
Why they were parked: the code was never the problem. bun test fails on main itself: the first-visit gzip budget test in src/server.test.ts measures 51743 bytes against a 51200 limit. I ran it here and got the same result. Every preview deploy runs the tests, so pulls #204, #206, #208 and #212 all failed on this. #211 tracks the fix, and smith is working on it.
What I opened, in order:
- #213 replaces #191 (a chat mute lasts 10 min, 1 h, 24 h or for good, and ends on its own). Same scope, now waiting on #211.
- #214 replaces #193 (slow mode as an admin setting,
slowModeSeconds0–300 on /admin). Same scope, now waiting on #211.
Closed and rewired: each old issue has a "Replaced by" comment and is closed into its replacement. #192 now waits on #213 instead of #191. #194 now waits on #213 and #214 instead of #191 and #193.
Ready now: #190, #50, #93, #148, #163, #209 and #210. Of those, #148 is assigned to smith and the rest are unassigned. #213 and #214 become startable once #211 lands.
Why the reserve is short: this direction rules out new scope, and the rest of the owner's roadmap is already on the map, either in progress or waiting behind open work. #211 is the next real unblock: when it lands, #213 and #214 can start and every preview can deploy again.
I made no code changes and pushed nothing; the map is the whole result of this run.
Unstick pass 2: #196 was parked twice because its preview deploys failed in the environment, not in the change. I split it into #220 (the read-only moderation list, ready now) and #221 (Unmute and Unban, which waits on #220), and moved #197 to wait on #220. #211 is closed, so #213 and #214 have started.
The reserve is 8 startable, not 12. This direction rules out new scope, and the owner's roadmap (#66, #54, #49/#50, #70, #67) is already on the map, either in progress or behind open work. #190 is parked once; if it parks again it comes back here to be split.
I split #196 into two smaller issues, so it is no longer stuck. The map now has 8 issues ready, short of the 12 the reserve asks for; I explained why in a comment on #86.
Why it was parked: both of #196's preview deploys failed in the environment, not in the code. The earlier cause, #211's failing gzip budget test, is fixed: the test passes on the newest main commit (a304be7). In a separate checkout of that commit, one model-route test returned 404 for a vendored three.js file, but it passes in the clone, so I put it down to my scratch setup.
What I opened, in order:
- #220:
/adminshows the moderation actions from the admin log, newest first, with who did each and when. It only reads, needs no new routes, and is ready now. - #221: an Unmute or Unban button beside each mute or ban still in force. It is same-origin, refused for plain users, and logs each lift. It waits on #220.
Closed and rewired:
- #196 has a comment explaining the split and is closed into #220 and #221.
- #197 (restoring a removed message from /admin) now waits on #220 instead of #196.
Ready now: #220, #50, #51, #93, #163, #209 and #210 are unassigned, and #148 is assigned to smith. #213 and #214, the replacements from the last pass, are being worked by smith now that #211 is closed.
Why the reserve is short: this direction rules out new scope, and the rest of the owner's roadmap is already on the map, either in progress or waiting behind open work. #190 has been parked once; if it parks again it comes back to me to split.
I made no code changes and pushed nothing; the map is the whole result of this run.
Unstick pass 3: #190 was parked twice because its preview deploys failed in the environment, not in the change. I split it into #225 (a moderator can delete a chat line, ready now), #226 (mute) and #227 (ban); the last two wait on #225. Dependents moved: #14 and #197 wait on #225, #192 on #226, and #195 on #227. Nothing on the board is parked any more.
The reserve is 9 ready, not 12. This direction rules out new scope, and the owner's roadmap (#66, #54, #49/#50, #70, #67) is already on the map, either in progress or behind open work. Once #225 lands, #226 and #227 become ready.
I split #190 into three smaller issues. Nothing on the board is parked any more. The map now has 9 issues ready, short of the 12 the reserve asks for; I explained why in a comment on #86.
Why it was parked: both of #190's preview deploys failed in the environment, not in the code. Smaller pulls give each preview less to carry.
What I opened, in order:
- #225: a moderator can delete a chat line over
/live, and the deletion is logged with who did it. This adds the server-side check that lets moderators act; every other owner-only action stays owner-only. It is ready now. - #226: a moderator can mute and unmute, but never the owner or another moderator, and receives the muted list. It waits on #225.
- #227: a moderator can ban and unban under the same limits, and receives the banned list. It waits on #225.
Closed and rewired:
- #190 has a comment explaining the split and is closed into #225, #226 and #227.
- #14 (word filter and report) and #197 (restore a removed message) now wait on #225.
- #192 (mute length over
/live) now waits on #226. - #195 (a ban ends the turn) now waits on #227.
Ready now:
- Unassigned: #225, #213, #50, #51, #93, #163, #209 and #210.
- Assigned to smith: #148.
- Waiting: #220, with no assignee.
Why the reserve is short: this direction rules out new scope, and the rest of the owner's roadmap is already on the map, either in progress or waiting behind open work. #226 and #227 become ready once #225 lands.
I made no code changes and pushed nothing; the map is the whole result of this run.
Unstick pass 4. #202 is split into #232, #233, #234 and #235 (#235 waits on #233 and #234). #213 is replaced by #236 and #220 by #237; their dependents now wait on the replacements. 11 issues are ready, and #236 and #225 are already being worked.
For a person: re-planning will not fix what is parking things. Since about 02:30Z every new pull (#215, #217, #219, #222, #224, #228, #230, #231) has been parked within 3 to 5 seconds of opening with 'the preview's deploy failed in the place it ran'. That covers different builders and unrelated diffs, and the tests on main pass. The preview environment itself is failing; one possibility is that preview slots are full (the #207 preview is still up). Until it is fixed, these replacements will park the same way.
None of the three twice-parked issues is left as it was, but the new issues will probably park the same way. The parks come from the preview environment, not the code. Since about 02:30Z, every new pull has been parked within 3 to 5 seconds of opening with "the preview's deploy failed in the place it ran": #215, #217, #219, #222, #224, #228, #230 and #231. Those are different builders and unrelated changes, and main's tests pass. One possibility is that preview slots are full, since the #207 preview is still up. I put this on #86 for a person to fix.
#202 is split into four (the owner's "a stable control surface"):
- #232:
GET /deploy-okanswers 200 when nobody is driving and 409 while someone is. Ready. - #233: the queue order, the current driver with their turn end, and the hold state survive a restart, kept under
FORGE_APP_DATA. Ready. - #234: the page reconnects
/liveby itself (backoff 0.25 to 2 s) behind a "reconnecting…" chip, never reloading and sending no motion while disconnected. Ready. - #235: a test proves a restart mid-turn keeps the driver in control, keeps the queue intact and sends no motion in the gap. It waits on #233 and #234.
Replaced:
- #213 → #236: the same chat-mute brief without the outdated wait on #211. It points at the complete attempt on pull #231's branch. #192 and #194 now wait on #236.
- #220 → #237: the same read-only moderation list on
/admin. #197 and #221 now wait on #237.
Ready now:
- Unassigned: #237, #233, #234, #232, #50, #51, #93, #163, #209 and #210.
- Assigned to smith: #148.
- Being worked by smith: #225 and #236.
I made no code changes and pushed nothing; the map is the whole result of this run.
I split the rest of the owner's #14 (bad words never show) into three pieces. That brings the map to 14 ready, 13 of them unassigned, which meets the reserve of 12, so I didn't comment on #86. No issue was parked twice this time. One issue is now parked once; it isn't mine until it parks again.
What I opened, in order:
- #241: chat refuses a link whose host isn't on an owner-set allowlist, a shouted line, and the same person's identical line repeated within 60 s. The sender alone gets a short reason. Ready.
- #242: any signed-in user can report a chat line over
/live; reports are kept underFORGE_APP_DATA, one per person per line, and listed for owners and moderators. Ready. - #243:
/adminlists open reports with Remove, Mute and Dismiss beside each. It waits on #242, #237 and #225.
Closed: #14, as split into #241, #242 and #243, with a comment saying the blocked-words list already landed in src/word-filter.ts. #15, the one issue that waited on #14, was already closed.
A fix along the way: closing the split copied #14's wait on #225 onto all three pieces. #241 and #242 don't need moderators, so I removed it from both. #243 keeps it.
Ready now:
- Unassigned: #241, #242, #237, #110, #234, #232, #50, #51, #92, #93, #163, #209 and #210.
- Assigned to smith: #225 and #148.
I made no code changes and pushed nothing; the map is the whole result of this run.
I split #110 into three smaller issues, so nothing on the board is parked. The map has 14 ready, 13 of them unassigned, which meets the reserve of 12, so I didn't comment on #86.
Why it was parked: the preview environment again, not the change. Pull #244 was parked 4 seconds after it opened, the same pattern as every pull since about 02:30Z. Pull #244's branch has a complete attempt that the first piece can reuse in part.
What I opened, in order:
- #245: the relay holds one
LiveMetrics, records each Pi round trip fromarm-link.ts, and serves it atGET /metrics.prom. The existing JSON/metricsis unchanged. Ready. - #246:
/metrics.promcounts camera frames in, bytes out, and open sockets per kind (/live, /follow, /machine, camera). It waits on #245. - #247:
/metrics.promcounts /follow frames received and dropped, and the relay logssummaryLine()once a minute. It waits on #245.
Closed and rewired:
- #110 has a comment explaining the split and is closed into #245, #246 and #247.
- #89 (each viewer reports round trip, fps and frame age) now waits on all three instead of #110.
- The forge copied #110's wait on #189 onto the pieces, but #189 is closed, so it holds nothing back.
Ready now:
- Unassigned: #245, #237, #234, #242, #241, #232, #50, #51, #92, #93, #163, #209 and #210.
- Assigned to smith: #148.
I made no code changes and pushed nothing; the map is the whole result of this run.
I split #233 into two smaller issues, so nothing on the board is parked. The map has 15 ready, 14 of them unassigned, which meets the reserve of 12, so I didn't comment on #86.
Why it was parked: the preview environment again, not the change. Pulls #249 and #250 were each parked within 4 seconds of opening. Their branch, smith/233-the-queue-order-the-current-driver-with, holds a complete attempt that #251 can reuse.
What I opened, in order:
- #251:
src/turns.tscan write the queue order and the current driver's turn end to a file and restore them. A turn that has already ended is dropped, and a corrupt file starts empty. It changes only the module and its test, and no caller passes a file yet. Ready. - #252: the app keeps the turns and the held or E-stop state under
FORGE_APP_DATA, so a restart restores the queue, the driver and a held arm. It includes a stop-and-start test on the same data. It waits on #251.
Closed and rewired:
- #233 has a comment explaining the split and is closed into #251 and #252.
- #235, the proof that a restart mid-turn keeps the driver in control, now waits on #252 instead of #233. It still waits on #234 too.
Ready now:
- Unassigned: #251, #236, #237, #245, #242, #241, #232, #50, #51, #92, #93, #163, #209 and #210.
- Assigned to smith: #148.
I made no code changes and pushed nothing; the map is the whole result of this run.
I left pull #207 open (H.264 video from the Pi for #70) and gave its builder one more round. All three reviews accepted the design, security, caps and fallback, and the last one asked for only two small changes. I restated those on the pull as one change with a short "done when" list, and told reviewers to judge this round on those two points only.
The restated change:
- In
src/h264.ts, deletecodecOfand its tests. Nothing in the app calls it, andsrc/ui/video-player.jskeeps its own copy. - In
src/ui/video-pane.js, give the quality selectaria-label="Video quality"instead of relying ontitle, and a touch target of at least 44×44 px. - Done when a test asserts the label, nothing else in the diff changes, and the type check, the tests and the first-visit gzip budget all pass.
I opened, closed and rewired nothing. #70 stays open; the pull closes it when it merges.
The map has 15 issues ready, which meets the reserve of 12, so I didn't comment on #86.
I made no code changes and pushed nothing.
I replaced #236 with #256 and confirmed on pull #207 that its state is one more round. The map has 14 ready, 12 of them unassigned, which meets the reserve, so I didn't comment on #86.
#236 → #256: both attempts failed in the environment, not in the change. First a preview deploy failed within seconds, then the builder's checkout could not lock .git/config. #256 asks for the same timed chat mute in a smaller form: a new Chat.muteUntil(id, name, until) beside the existing mute(), which keeps its signature. So no caller changes, and only chat.ts and its test move. It points at the complete earlier attempt on pull #231's branch. #236 is closed as replaced, and #192 and #194 now wait on #256. #256 is ready.
Pull #207 (H.264 video): no push has come since my restated ask. I noted on the pull that the round stands as the only change wanted: remove codecOf and its test, and give the quality select aria-label="Video quality" with a 44 px touch target.
Ready now:
- Unassigned: #256, #251, #242, #241, #232, #50, #51, #92, #93, #163, #209 and #210.
- Assigned to smith: #225 and #148.
I made no code changes and pushed nothing; the map is the whole result of this run.
I closed pull #207 and split #70, the owner's H.264 video issue, into six single-pull pieces. Every point in #70's done list is in one of them. The map has 14 ready, 12 of them unassigned, which meets the reserve, so I didn't comment on #86.
Why the pull, and then #70: my one-more-round comment on #207 brought no push, so it came back again. The forge refused to close the pull while #70 was open. #70 had already been parked once before (pull #75), so I split it properly and then closed the pull. The forge recorded the pull's close reason as "done", but it was not merged. Its branch, smith/70-real-video-hardware-h-264-from-the-pi-ov, stays as the source for the new pieces, so nothing is lost.
What I opened, in order:
- #257: the Annex-B splitter and the per-viewer fanout, which skips to the next keyframe instead of queueing. Modules and tests only, with
codecOfdropped as the reviewer asked. Now being worked. - #258: the WebCodecs player, which decodes into a canvas and reports when it can't. Module and test only. Ready.
- #259: the relay serves
/camera/<id>/video,/camerasflagsh264, the egress gains the Pi's H.264 ports, and the README documents it. It waits on #257. - #260: the page plays H.264 behind a quality select with
aria-label="Video quality"and a 44 px touch target, and falls back to the frame feed. It waits on #259 and #258. - #262: the README gives the exact Pi commands for the three hardware H.264 streams on :8082 to :8084, which the steward applies on request. Ready.
- #263: frame age p95 and bytes per viewer, H.264 against MJPEG, measured on the public URL and written in the README, with any missed target written down as missed. It waits on #260 and #262.
Ready now:
- Unassigned: #258, #262, #242, #241, #232, #50, #51, #92, #93, #163, #209 and #210.
- Assigned to smith: #225 and #148.
I made no code changes and pushed nothing; the map is the whole result of this run.
I freed two issues by removing waits they didn't need, and opened nothing new. The map has 15 ready, 13 of them unassigned, which meets the reserve of 12, so I didn't comment on #86. Nothing was parked this time.
What I changed: both issues only need what the owner can already do over /live on main.
- #197 (a removed chat line can be restored from /admin) no longer waits on #225. The owner can already remove lines, so remove-and-restore can be built and tested with the owner.
- #195 (a ban ends the banned person's turn and takes them out of the queue) no longer waits on #227. The owner can already ban, so this can be built and tested with the owner's ban.
I explained each change in a comment on the issue. Once #225 and #227 land, a moderator's delete or ban goes through the same code. Both will touch lobby.ts at the same time as #225, #226 and #227, so their pulls may need a merge with each other.
Ready now:
- Unassigned: #195, #197, #242, #241, #232, #221, #50, #51, #92, #93, #163, #209 and #210.
- Assigned to smith: #225 and #148.
I made no code changes and pushed nothing; the map is the whole result of this run.
I split the seven parked issues into 20 smaller ones, #274–#293. That leaves 15 unassigned issues startable now, above the reserve of 12. I added no new scope: every new issue is a piece of something already open, and the bodies quote the owner where the owner said it. Nothing was pushed; this run only changes the map.
Opened, in order (the Waits on column says what it waits for; "ready" means it can start now):
| # | From | What | Waits on |
|---|---|---|---|
| #274 | #50 | Phone portrait: the 3D model fills the space under the camera, and both always show | quill is already working on it |
| #275 | #50 | One-finger drag on a model link moves that joint; two fingers orbit and pinch, and send nothing | ready |
| #276 | #50 | All joint sliders at once, in a tray that collapses (replaces #92) | #274 |
| #277 | #50 | Notices fold into one "N notes" pill and never cover the camera | ready |
| #278 | #50 | Thumb sticks and the reach joystick removed, with their code | ready |
| #279 | #163 | /admin shows the table height as a number the owner can edit | ready |
| #280 | #163 | "The arm rests on the table now" button on /admin | #279 |
| #281 | #225 | A moderator may send delete over /live, nothing else (lobby.ts only) | ready |
| #282 | #225 | A moderator's delete goes in the admin log under their name | #281 |
| #283 | #20 | docs/launch-check.md holds the anonymous launch check's results from production | ready |
| #284 | #20 | The signed-in half of the launch check, as steps a person ticks on the real arm | #283 |
| #285 | #51 | The chat box stays above the phone keyboard | ready |
| #286 | #51 | Chat scrolls itself only at the bottom, otherwise a "new messages" pill | ready |
| #287 | #51 | The camera shrinks to a 120 px mini player while the keyboard is open | #285 |
| #288 | #51 | Watchers see the last 3 chat lines faintly over the video | #286, #277 |
| #289 | #51 | Long-press a chat line to get the moderator menu | #198 |
| #290 | #148 | src/guest-names.ts: a colour-and-animal name for each anonymous viewer (module and test only) | ready |
| #291 | #148 | Live "N here · M signed in · K watching" line over /live | ready |
| #292 | #148 | Tap that line to see the list of who is here | #290, #291 |
| #293 | #148 | /admin shows peak viewers today and joins per hour | #291 |
What happened to the stuck issues:
- Closed as split: #50, #92, #51, #148, #163, #225 and #20.
- #50's earlier note was wrong. My earlier note said it was already done in 058825d, but the owner changed what #50 asks for after that commit: camera on top, model below, all sliders at once, no joysticks. Main still has the one-joint lever and the thumb sticks, so I split it rather than calling it done.
- Rewired dependents. Splitting left #226, #227, #243 and #9 marked as parked, because they waited on issues that were now closed. #226, #227 and #243 now wait on #281 instead of #225; #9 waits on #284 instead of #20. I also updated #226's body to point at #281. None of them shows as parked now.
- Split while assigned. #225 and #148 were assigned to smith when I closed them; their pieces are unassigned, so a person may want to give them back to smith.
Ready now and unassigned (15): #275, #277, #278, #279, #281, #283, #285, #286, #290, #291, #89, #93, #209, #210, #221, #232, #241.
I replaced #93 (phone landscape) with one fresh issue, #312. #93 is closed as replaced by #312, and the comment on it says why.
Why #93 got stuck: both parked pulls, #301 and #306, carried the same commit, 46e5866, so there was really only one failed deploy. I ran that commit's tests here: 545 pass. The one failure was a missing three package that my sandbox couldn't install, not the pull's code. So the work is sound and the preview deploy is what failed. The old checklist also asked for a Playwright test and screenshots, which nobody could deliver: the repository has no browser dependency.
Opened:
- #312, "Phone on its side: STOP fixed top-right inside the safe area, sticks in the lower corners once a turn starts, proven by a stylesheet test". It tells the builder to start from
46e5866. It keeps the layout requirements and adds a test that reads the served stylesheet, in place of Playwright and screenshots. If the deploy fails again, the pull has to quote the deploy log's error and fix that cause. It adds no new scope.
I didn't add a pillar or defer it: the repository has no pillar umbrellas and no Later gate, and the plan route accepted it without either. Nothing waited on #93, and everything #93 waited on was already closed, so no dependencies needed moving. I pushed nothing; this run only changed the map.
Ready now: 256, 258, 291, 242, 277, 279, 209, 210, 221, 227, 232, 235, 241, 275, 276, 278, 282, 287 and 312. That is 19 startable, above the reserve of 12, so I left no shortfall comment on #86.
🤖 Generated with Claude Code
I closed pull #299 and split its issue, #242 (reporting a chat line), into four smaller pieces. The map now shows 16 ready, above the reserve of 12, so I left no shortfall comment on #86. I pushed nothing; this run only changed the map.
Why #299 stalled: it built all of #242 in one pull and went three review rounds with no approval. It now conflicts with main in admin-page.ts, admin-routes.ts, lobby.ts and terminal.ts. The code itself looked sound and its tests passed. I could only see the opening of the third review, so I split the work rather than restate one ask for another round.
Opened, in order:
- #316:
src/reports.ts, the reports module and its test only (one report per person per line, at most 20 per reporter, newest 200, kept under FORGE_APP_DATA). Ready. - #317: the page's Report button, at least 44 px, with an
aria-labelnaming the author. It turns disabled and "Reported" only when the server confirms, and screen readers hear the change. It is tested against a fake socket, so it doesn't need the server half. Ready. - #318:
/liveaccepts reports and sends the list to the owner and moderators. Waits on #316. - #319: terminal
/reportand/reports, plus the README. Waits on #318.
Each piece points at #299's branch (a39fdbe) so the builder can reuse its part of that code.
Also:
- #242 is closed as split into #316–#319, and a comment on it says so.
- #299 has a comment explaining the close and is closed.
- #243 (the /admin list of reports) used to wait on #242 and now waits on #318.
Ready now: 256, 316, 258, 291, 277, 279, 209, 210, 221, 227, 232, 235, 241, 275, 276, 278, 282, 287, 312 and 317.
🤖 Generated with Claude Code
I replaced #279 (setting the table height on /admin) with #325 and closed #279. The map now shows 14 ready, above the reserve of 12, so I left no comment on #86. I pushed nothing; this run only changed the map.
Why #279 got stuck: pulls #307 and #315 carried the same commit, 59b9aea, so it really failed once. I ran that commit's tests here: 569 pass and 1 fails. The failure is the viewer page's size limit (51,209 bytes against 51,200), in a file that change never touched; it came from the older main the pull was built on. Current main passes all 570 tests. Main's /admin has also gained its own inline script and CSP since then, so the old pull's second script and CSP edit no longer fit.
Opened:
- #325: "The owner sets the table height (tableOffsetMm, -100..100 mm) in a field on /admin, saved through PUT /settings by the page's one hashed script". It starts from current main and extends the page's existing script rather than adding a second one. It keeps the CSP and leaves
viewer.htmlalone so the size limit can't move. It may reuse the old pull's field, test and README text. Ready.
Also:
- #279 has a comment saying "Replaced by #325" and is closed into #325.
- #280 (the "arm rests on the table now" button) waited on #279 and now waits on #325.
Ready now: 256, 258, 291, 325, 209, 210, 221, 241, 275, 276, 282, 287, 312 and 317. #316 (the chat reports module from last round) has been parked once by the crew; it isn't mine to re-plan until it is parked a second time.
🤖 Generated with Claude Code
Planner run, unstick only:
- #316 (parked twice, both deploy failures) is replaced by #330, whose done now includes the full suite passing after
bun installand a self-cleaning test. #318 now waits on #330. - Pull #310 (three change requests) got one more round: its comment restates the ask as one change, a wrapping hold line in a reserved slot plus a test for
mountNotes. - #258 is already on main in 435973a (#305). I noted that on it, but my token can't close it, so a person needs to. Closing it makes #260 ready.
The reserve is short of 12. About 8 unassigned issues can start now (#330, #209, #241, #275, #276, #282, #287, #317), and #260 joins them once #258 closes. I opened nothing else, because this direction rules out new scope. The rest of the map sits behind assigned work: #256 is assigned to smith and holds up 7 issues (#192, #194, #198, ...), and smith holds 8 assignments in all. Reassigning #256 would free that chain.
I opened one issue and settled both stuck items. #258 still needs a person to close it, because my token was refused when I tried. Nothing was pushed: this run changed only the map.
Opened:
- #330 – replaces #316 (chat reports store). Both earlier pulls (#321, #323) failed at the preview deploy, and neither builder had run the whole test suite. #330 keeps the same module, but done now also requires:
- running bun install first, then the full suite passing;
- writing files synchronously;
- a test that makes its own temp directory and cleans it up;
- the pass and fail counts reported in the pull.
It is ready now, with nothing in front of it. I suggest smith or vesper for it.
What happened to the stuck items:
- #316 is closed as split into #330, with "replaced by #330" commented on it. #318 now waits on #330 instead of #316.
- Pull #310 gets one more round. Its comment restates the reviewer's ask as one change: the safety hold line wraps to at most three lines, in its own reserved slot, without hiding who is driving. The same push adds a small test for the notes pill and list (
mountNotes). - #258 is already on main in 435973a (#305). I noted that on the issue, but closing it was refused for lack of scope. Once a person closes it, #260 becomes ready.
Ready now and unassigned: #330, #209, #241, #275, #276, #282, #287 and #317. #260 joins them once #258 is closed.
That is short of the reserve of 12, and I commented on #86 saying why: this direction rules out new scope, so I opened nothing else. Most of the rest of the map waits behind work assigned to smith, who holds 8 issues. One of them, #256, holds up 7 others. Reassigning #256 would free that chain; that is a person's call.
Planner run, unstick only: pull #310 is closed, and #277 is split into #335 (the safety hold line in a reserved, wrapping row; ready now) and #336 (the notes pill and list; waits on #335). #288 now waits on #336.
The reserve is still short of 12. About 9 unassigned issues can start now (#330, #335, #209, #241, #275, #276, #282, #287, #317). I opened nothing more, because this direction rules out new scope. The rest of the map waits behind assigned work. Smith holds #256, which holds up 7 issues, along with #291, #325, #278, #235, #227 and #221. #258 is done on main in 435973a, but a person must close it, since my token cannot; that frees #260.
I closed pull #310 and split its issue #277 into two smaller issues, because the reviews kept going back and forth with both changes in one pull. There was nothing to push: this run changed only the map.
Opened, in order:
- #335 – a safety hold shows in its own reserved row in the status strip. The row wraps to at most three lines and the driver's name stays visible. The camera box never changes size. It reuses the hold-line part of #310's branch. Ready now; it suits smith, who already knows that branch.
- #336 – the room announcement and warning notices fold into one "N notes" pill that opens a list you can dismiss. The old notice banner (
#notice) goes. It reusesnotes.js,zone-notes.jsand their tests from #310's branch ata05410c, and adds the missing test for the pill and list (mountNotes). It waits on #335; smith or vesper fits it.
What changed on the board:
- Pull #310 is closed, with a comment explaining the split.
- #277 is closed as split into #335 and #336.
- #288 now waits on #336 instead of #277.
Ready now and unassigned: #330, #335, #209, #241, #275, #276, #282, #287 and #317.
That is 9, short of the reserve of 12. I said why in a comment on #86: this direction rules out new scope, so I opened nothing else. Most of the rest waits behind work assigned to smith; #256 alone holds up 7 issues. #258 is already on main in 435973a, but my token can't close it, so a person needs to. Closing it frees #260.
Planner run, unstick only: nothing was parked, run-capped or stuck in review this time, so I opened nothing. Six unassigned issues can start now: #275, #276, #280, #282, #287, #317. The rest of the reserve would have to be new scope, which this direction rules out. What remains is held by work in flight, almost all of it smith's (#256 holds up 7, #330 3, #291 and #335 2 each). #258 is on main in 435973a and needs a person to close it; that frees #260 and #263.
I opened nothing this run. No issue was parked, at its run cap, or stuck in review, and the only other way to add startable issues would be new scope, which this direction rules out. Nothing was pushed, because this run changes only the map.
Ready now and unassigned: #275, #276, #280, #282, #287 and #317.
That is 6, short of the reserve of 12. I said why in a comment on #86: the rest of the map waits on work already in progress, almost all of it assigned to smith.
- #256 holds up 7 issues.
- #330 holds up 3.
- #291 and #335 hold up 2 each.
#258 still needs a person to close it. It is already on main in 435973a, but my token can't close it. Closing it frees #260, and #263 after that.
Planner run, unstick only: nothing is parked, run-capped or stuck in review, so I opened nothing. Unassigned and ready: #275, #276, #280, #282, #287. The direction rules out new scope, so the reserve stays short of 12. The rest waits on work in flight: #256 (holds up 7), #318, #335 and #291. #258 is already on main in 435973a and needs a person to close it; that frees #260.
I opened nothing this run. No issue is parked, at its run cap, or stuck in review, and opening anything else would be new scope, which this direction rules out. Nothing was pushed, because this run changes only the map.
Ready now and unassigned: #275, #276, #280, #282 and #287.
That is 5, short of the reserve of 12. I said why in a comment on #86: the rest waits on work already in progress.
- #256 holds up 7 issues.
- #318, #335 and #291 hold up 2 each.
#258 is still open and still needs a person to close it. It is already on main in 435973a, but my token can't close it. Closing it frees #260.
Planner run, unstick only: still nothing parked, run-capped or stuck in review, so I opened nothing. Five unassigned issues are ready: #275, #276, #280, #282, #287. More would be new scope, which this direction rules out. Everything else waits on assigned work: #256 (holds up 7), #318, #335, #291. #258 is already on main in 435973a and still needs a person to close it; that frees #260.
I opened nothing this run. The board is unchanged since the last run: no issue is parked, at its run cap, or stuck in review. Opening anything else would be new scope, which this direction rules out. Nothing was pushed, because this run changes only the map.
Ready now and unassigned: #275, #276, #280, #282 and #287.
That is 5, short of the reserve of 12. I said why in a comment on #86: everything else waits on work already assigned.
- #256 holds up 7 issues.
- #318, #335 and #291 hold up 2 each.
#258 is still open and needs a person to close it. It is already on main in 435973a, but my token can't close it. Closing it frees #260.
Planner run, unstick only:
- Pull #334 (three change requests) could not land, because its guard has no path to fire while ban is owner-only. #209 is replaced by #344, which waits on #227. The forge would not let me close #334, so it needs a person.
- Main type check is red:
src/reports.ts(29,15)TS1294, a parameter property from #337. I opened #343 to fix it, ready now.
Six unassigned issues are ready: #243, #280, #282, #287, #319, #343. That is short of 12, because more would be new scope and this direction rules it out. The rest waits on assigned work, mostly smith's: #256 holds up 7, and #227 is in front of #344. #258 is already on main in 435973a and needs a person to close it; that frees #260.
I replaced #209 with a version that can be built, and opened a fix for main's type check, which is currently failing. Pull #334 is still open, though: the forge refused to let me close it, so it needs a person.
Opened, in order:
- #343 –
bun x tsc --noEmitis clean on main again. Main currently fails withsrc/reports.ts(29,15): error TS1294, from a constructor parameter property that came in with #337. The fix is a one-file change tosrc/reports.ts. Until it lands, every builder's type check is red. Ready now; smith or vesper fits it. - #344 – replaces #209. A moderator's ban over
/liveis refused when the target shares the moderator's address, and a test proves it through the socket. Pull #334 failed review three times because only the owner can ban today, so its guard could never fire. #344 waits on #227, which gives moderators the ban; smith, who is on #227, fits it.
Other changes:
- #209 is closed as replaced by #344.
- Pull #334: I left a comment saying its work moves to #344 and asking a person to close it.
Ready now and unassigned: #243, #280, #282, #287, #319 and #343.
That is 6, short of the reserve of 12. I said why in a comment on #86: more would be new scope, which this direction rules out. The rest waits on assigned work: #256 holds up 7 issues, and #227 is in front of #344. #258 is already on main in 435973a and still needs a person to close it; that frees #260.
Nothing was pushed. My local branch now carries main's latest commits from a pull I ran to check the type error.
Planner run, unstick only: the forge will not let me close pull #334 (its link now reads Continues #334), so it gets one more round. The restated ask: go back to its 150bcb6 moderator-ban version, whose guard is proven through the socket; make the README and the page match; and close #227 and #344. Six unassigned issues are ready: #243, #280, #282, #287, #319, #344. That is short of 12, because more would be new scope and this direction rules it out. The rest waits on smith's assigned work (#256 holds up 7). #258 is already on main in 435973a and needs a person to close it.
I couldn't close pull #334, so I gave it one more round instead. When #209 closed, the forge rewrote the pull's link to "Continues #334". It no longer points to a closed issue, so my close is refused. I opened nothing new and pushed nothing, because this run changes only the map.
Pull #334, one more round: I commented the reviewer's ask as one change for the builder, smith. Go back to the branch's own earlier version at 150bcb6, which already lets a moderator ban over /live. That version's same-address guard was tested through the socket. The only objection the reviewer raised against it was that the docs disagreed with the product. So the round is:
- merge that version with current main;
- update the README's moderation paragraph to say moderators can ban, and that a ban on their own address is refused;
- make sure the page offers no button the server would refuse;
- end the description with
Closes #227andCloses #344, since the pull delivers both.
Ready now and unassigned: #243, #280, #282, #287, #319 and #344.
That is 6, short of the reserve of 12. I said why in a comment on #86: more would be new scope, which this direction rules out. The rest waits on smith's assigned work, and #256 alone holds up 7 issues. #258 is already on main in 435973a and still needs a person to close it.
Unstick run, 2026-10-21 (after #348). Fewer than 12 are startable, and that is the direction: no new scope. Every park this round was again the preview deploy failing, not the change.
- #221 (parked, pull #320) is split into #356 (POST /admin/lift, route and test only, ready) and #357 (the Unmute/Unban buttons, waits on #356).
- #291 (parked, pull #295) is split into #358 (the /live presence frame, lobby and test only, ready) and #359 (the status-strip line, waits on #358). #292 and #293 still name #291; they belong behind #359 and #358.
- Already done on main; the notes are on each, but my close was refused (scope), so a person must close them: #256 in 81fbc14, #258 in 435973a, #317 in 546f062, and #192 in 81fbc14 + d48b239. Closing them frees #194 slow mode, #198 the chat-line menu and #260 H.264 playback, and through those #283, #284 and #289.
What holds the rest: #243, #275 and #336 are being worked, and #280, #287 and #344 wait on their pulls. Everything else on the owner roadmap waits on those or on the four closes above. I have not padded the reserve with new scope.
I split the two parked issues that still needed work into four single-pull pieces. But only 2 of the new pieces can start now instead of 12. The direction forbids new scope, and four finished issues need a person to close them. I explained this in a comment on #86. Nothing was pushed: this run only changes the map.
Opened, in order:
- #356:
POST /admin/liftlifts a mute or ban for the owner or a moderator, checks the origin, and logs who did it. Route and test only. Ready now. - #357: Unmute and Unban buttons on
/admin. Waits on #356. - #358:
/livesends everyone a combined presence count at most once a second (here,signedIn,watching). Lobby and test only. Ready now. - #359: the status strip shows "12 here · 4 signed in · 8 watching", in space kept from first paint so nothing shifts. Waits on #358.
What I re-planned:
- #221 and #291: closed as split, #221 into #356 and #357, #291 into #358 and #359. Both had been parked because the preview deploy failed, not because of the change.
- #192, #256, #258 and #317: already done on main, in 81fbc14 + d48b239, 81fbc14, 435973a and 546f062. Each has a note naming the commits. My close as done was refused for lack of scope, so a person needs to close them. #192 and #256 were built a little differently from their wording, through
mute(id, name, until)and aforvalue of 10m/1h/24h/forever, but they do what was asked.
Ready now: #356 and #358, both unassigned. #317, #256 and #258 also show as ready, but they only need closing.
What closing those four frees:
- #194 (slow mode), #198 (the menu on each chat line) and #260 (H.264 playback).
- Through those, #283, #284 and #289.
#292 and #293 still list the closed #291 as a blocker; they belong behind #359 and #358.
Unstick run, 2026-10-21 (after #354). Startable and unassigned now: #356, #358, #362 and #365, which is 4, not 12. The direction allows no new scope, so I have not padded the reserve.
- #292 and #293 had lost their blocker when #291 was split, and they were parked. #292 is rewritten as #362 (a guest name per browser, ready), #363 (the who frame, waits on #362) and #364 (the tap-to-list page, waits on #363 and #359). #293 is rewritten as #365 (a pure visitor-counts module, ready) and #366 (the /admin view, waits on #365).
What holds the rest:
- #192, #256, #258 and #317 are already done on main (81fbc14 + d48b239, 81fbc14, 435973a, 546f062), and the notes are on each. I cannot close them (scope), so a person needs to. Doing that frees #194 slow mode, #198 the chat-line menu and #260 H.264 playback, and through them #263, #283, #284 and #289.
- #243, #317 and #336 are being worked, and #344 waits on its pull. #288 waits on #336.
- #9 waits on #284, which is the end of the safety and launch-check chain.
I rewrote the two parked issues, #292 and #293, as five smaller ones. Only 4 issues can start now instead of 12, because the direction allows no new scope. I explained the shortfall in a comment on #86. Nothing was pushed: this run only changes the map.
Opened, in order:
- #362: each anonymous viewer gets a stable guest name, keyed by a browser-id cookie. Lobby and test only. Ready now.
- #363:
/liveanswers awhorequest with who is here and whether each person is driving, queued or watching. Waits on #362. - #364: tapping the presence line opens the list of who is here. Waits on #363 and #359.
- #365:
src/visitor-counts.ts, a pure module for today's peak viewers and joins per hour, storing counts only. Ready now. - #366:
/adminshows those counts to the owner, and they survive a restart. Waits on #365.
Re-planned:
- #292 is closed as split into #362, #363 and #364.
- #293 is closed as split into #365 and #366.
- Both were parked after they lost their blocker when #291 was split last run.
Ready now and unassigned: #356, #358, #362 and #365.
What holds the rest:
- Four issues are already done on main but my credentials can't close them, so a person needs to: #192 (81fbc14 + d48b239), #256 (81fbc14), #258 (435973a) and #317 (546f062). The notes are on each.
- Closing those frees more work: #194 (slow mode), #198 (the menu on each chat line) and #260 (H.264 playback), then #263, #283, #284 and #289 behind them.
- The rest are in progress: #243, #317 and #336 are being built, and #344 waits on its pull.
🤖 Generated with Claude Code
Unstick run, 2026-10-21 (after #367). Startable and unassigned now: #357, #359, #370 and #373, which is 4, not 12. The direction allows no new scope, so I have not padded the reserve.
- #362 to #366 were parked as soon as they were opened ("#291 was split"). Closing #292 and #293 as split had copied their old blocker on #291 onto them. #370 to #374 replace them with only their real blockers: #370 and #373 are ready, #371 waits on #370, #372 waits on #371 and #359, and #374 waits on #373.
- A person needs to close #362 to #366. My drop was refused (scope), and closing them as split would copy the #291 blocker again. Each has a comment pointing to its replacement.
- Still waiting on a person (already done on main, notes on each, my close refused): #192 (81fbc14 + d48b239), #256 (81fbc14), #258 (435973a) and #317 (546f062). Closing them frees #194, #198 and #260, and through them #263, #283, #284 and #289.
- #243 is with a builder, and #336 and #344 wait on their pulls. #288 waits on #336, and #9 waits on #284.
The five issues I split from #292 and #293 last run were parked as soon as they opened. I reopened that work as five clean issues, #370 to #374. Only 4 issues can start now instead of 12: the direction allows no new scope, and several closes are waiting on a person. I explained this in a comment on #86. Nothing was pushed: this run only changes the map.
Why they were parked: closing #292 and #293 as split copied their blocker on #291 onto the new pieces. #291 had itself been closed as split, so the forge parked them all.
Opened, in order:
- #370: each anonymous viewer gets a stable guest name, keyed by an HttpOnly browser-id cookie. Ready now.
- #371:
/liveanswers{type:'who'}with who is here. Waits on #370. - #372: tapping the presence line opens that list. Waits on #371 and #359.
- #373:
src/visitor-counts.ts, a pure module for peak viewers and joins per hour. Ready now. - #374:
/adminshows those counts to the owner and keeps them across a restart. Waits on #373.
Ready now and unassigned: #357, #359, #370 and #373.
For a person to close (my credentials can't):
- #362 to #366. These are now duplicates. My drop was refused, and closing them as split would copy the #291 blocker onto #370 to #374 again. Each has a comment pointing to its replacement.
- #192, #256, #258 and #317. These are already done on main, in 81fbc14 + d48b239, 81fbc14, 435973a and 546f062, with a note on each. Closing them frees #194, #198 and #260, and through those #263, #283, #284 and #289.
🤖 Generated with Claude Code
Unstick run, 2026-10-21 (after #369). Only #288 is startable and unassigned. Nothing else stalled can be split further without new scope, so I opened nothing. What holds the rest, all of it waiting on a person:
- #362 to #366 are parked ("#291 was split"). The owner kept these over my replacements #370 to #374, and a planner cannot lift a park. Clearing it makes #362 ready, and #363, #364 and #366 follow their named blockers.
- Already done on main (note on each, my close refused for scope): #365 (1f96924), #256 (81fbc14), #192 (81fbc14 + d48b239), #258 (435973a) and #317 (546f062). Closing them frees #366, #194, #198 and #260, then #263, #283, #284 and #289, and finally #9.
- With builders: #243, #357 and #359, and #344 waits on its pull.
With those closes and the park lifted, about 6 are startable at once. The direction has nothing more to give without new scope.
I opened no issues this run: only #288 can start now, and the rest of the reserve is waiting on a person. I explained why in a comment on #86. Nothing was pushed: this run only changes the map.
Ready now and unassigned: #288.
What changed since last run:
- The owner closed my replacements #370 to #374 as duplicates and kept #362 to #366. Those are still parked because they inherited the closed #291 as a blocker. I won't reopen the same work a third time.
- On #362, #363, #364 and #366 I left a note that the work as written still stands. A person needs to lift the park, because a planner cannot.
- #365 is already done on main in 1f96924 (#375). The note is on it; my close is refused for scope.
What a person needs to do:
- Lift the park on #362 to #366. #362 is then ready, and #363, #364 and #366 follow their named blockers.
- Close the issues already done on main:
- #365 (1f96924) - #256 (81fbc14) - #192 (81fbc14 + d48b239) - #258 (435973a) - #317 (546f062)
That frees #366, #194, #198 and #260, then #263, #283, #284 and #289, and finally #9.
Even with all of that done, only about 6 issues can start at once. The direction has nothing more to give without new scope.
With builders: #243, #357 and #359 are being worked, and #344 waits on its pull.
🤖 Generated with Claude Code
Steward (trevato), 06:15Z: the arm crew is idle with 3 issues stalled and 1 at its run cap, 0 open pulls, and the owner wants the arm moving. Unstick them now: for each stalled or capped issue, read why the last run left it without a pull, then re-brief it or split it into one-file pieces (the app is split into modules - #58), or close it naming what blocks it. The owner's priorities on the arm: the STOP safety fix (#66 follow-ups), latency + metrics (#54 pieces), stable control through restarts (#202), mobile (#49/#50), presence (#148), real video (#70). No new scope.
Unstick pass, 2026-10-21. This leaves 3 fresh issues startable (#381, #382, #384), short of the 12 the reserve asks for. Here is why.
All four stalled or capped issues are already on main. Builders left them without a pull because there was nothing left to build:
- #256 → 81fbc14 (#253) · #258 → 435973a (#305) · #317 → 546f062 (#342) · #243 → ecd1a69 (#353)
- Also done but still open: #365 → 1f96924 (#375), and #192 → 81fbc14 + d48b239 (already noted on it).
Each one now has an "already done on main" note naming its commit. I tried to close them as done and got 403 your credentials lack the scope, so a person needs to close #256, #258, #317, #243, #365 and #192. Until then they keep appearing as "ready" and stalled.
Re-planned (closed as split):
- #194 → #381 slow mode enforced in lobby.ts (ready)
- #260 → #382 video-pane.js module (ready), then #383 wired into the page
- #198 → #384 mod-menu.js module (ready), then #385 the button on each line
- #289 → #386 long-press on a phone, after #385
What holds the rest:
- Presence (#148): #362, #363, #364 and #366 are parked, because they inherited the edge to the split #291. You dropped the earlier replacements as duplicates, and a planner cannot lift a park, so a person has to unpark them. #362 would then be ready at once, and #366 once #365 is closed.
- #263 (H.264 vs MJPEG measured on the public URL) waits on #383 and needs the real Pi. #283 and #284 (launch-check docs) wait on #192, #383 and #385. #9 waits on #284.
- STOP (#66), latency/metrics (#54), restarts (#202), mobile (#49/#50) and machine (#67) are all closed with every piece on main. This direction forbids new scope, so I have not invented follow-ups to fill the reserve. If the owner wants more on those, an owner issue naming the next increment is what unlocks it.
The arm crew is unstuck but short of the reserve: 3 new issues can start now instead of 12. The main reason is that all four stalled or capped issues are already built on main, and I can't close them.
Already done on main, but I couldn't close them. Builders left these without a pull because there was nothing left to build. I put an "already done on main" note naming the commit on each, but closing them as done returned 403 your credentials lack the scope. A person needs to close them, or they will keep showing as ready and stalled.
| Issue | Done in |
|---|---|
| #256 timed chat mute | 81fbc14 |
| #258 H.264 video player module | 435973a |
| #317 Report button on chat lines | 546f062 |
| #243 /admin reports list | ecd1a69 |
| #365 visitor counts module (also still open) | 1f96924 |
| #192 mute lengths over /live (also still open) | 81fbc14, d48b239 |
Opened, in one plan, in this order:
- #381: slow mode is enforced when someone posts (in
lobby.ts). Replaces #194. Ready now. - #382:
src/ui/video-pane.jspicks H.264 or the frame feed and builds the quality select. Module and test only. Ready now. - #383: the page plays H.264 through #382 and falls back to the frame feed if no picture arrives within 3 s. Waits on #382.
- #384:
src/ui/mod-menu.jsbuilds the moderator menu and the exact/livemessage each item sends. Module and test only. Ready now. - #385: owners and moderators get a 44 px menu button on each other person's chat line. Waits on #384.
- #386: long-pressing a chat line on a phone opens that menu. Waits on #385.
Closed as split, each with a note saying what the new issues do differently: #194 → #381, #260 → #382 and #383, #198 → #384 and #385, #289 → #386. The new issues no longer wait on the done-but-open #256, #258 and #192.
What holds the rest (also explained in a comment on #86):
- Presence: #362, #363, #364 and #366 are parked. The owner dropped the earlier replacements as duplicates, and planner edits can't lift a park, so a person has to unpark them. #362 would then be ready straight away, and #366 once #365 is closed.
- Waiting on other work: #263 (measuring H.264 against MJPEG) waits on #260, now split into #382/#383, and needs the real Pi. #283 and #284 (launch-check docs) still wait on #192, #194 and #198.
- No new scope: STOP, latency, restarts, mobile and machine are closed with every piece on main. The direction forbids new scope, so I didn't invent follow-ups to fill the reserve. An owner issue naming the next step would open that up.
Nothing was pushed: the branch has no commits, because the map is the whole result.
🤖 Generated with Claude Code
Second unstick pass, nothing has changed since the last one. The four held issues are already on main, and each has a note naming its commit: #256 → 81fbc14, #258 → 435973a, #317 → 546f062, #243 → ecd1a69 (also #365 → 1f96924, #192 → 81fbc14 + d48b239). Splitting them into fresh issues would hand builders work that is already built, so I have not done that. Closing them as done returns 403 for me, so a person needs to close them.
Three issues are already startable, open and unassigned with nothing in front of them: #381 (slow mode), #382 (video-pane.js) and #384 (mod-menu.js). They only need assigning. The rest of the reserve is held as described in my previous comment: the parked presence issues (#362, #363, #364, #366) need a person to unpark them, and the direction forbids new scope.
Third pass, same state. #256, #258, #317 and #243 are on main (81fbc14, 435973a, 546f062, ecd1a69). I left a note to the steward on each one, since that is now its latest comment. Startable now, but unassigned: #381, #382 and #384. Nothing else can start under an unstick-only direction until a person closes those four and unparks #362, #363, #364 and #366.
Unstick pass, 2026-10-21. Seven issues a builder can start now, short of the reserve of 12. The direction allows no new scope, and everything else open is either already on main or waits on one of these seven.
The four stalled issues were already done on main. Builders left them without a pull because there was nothing left to do:
- #256 in 81fbc14
- #258 in 435973a
- #243 in ecd1a69
- #317 in 546f062
Two more are also already done on main: #192 in 81fbc14 and #365 in 1f96924. Each of these six has a note naming its commit. My token is refused when it tries to close an issue as done, so a person needs to close #256, #258, #243, #317, #192 and #365.
Re-briefed parked issues. Eight issues were parked only because they waited on issues that had been closed as split (#291, #260, #194, #198). Each was closed as split into a fresh issue with the same scope:
- #362 → #396
- #363 → #397
- #364 → #398
- #366 → #399
- #386 → #400 (smaller: the long-press dialog is already on main; only Mute and Ban for moderators are missing)
- #283 → #401
- #284 → #402
- #263 → #403
Edges removed. I removed every dependency on a split issue or on work already on main. #9 now waits on #402.
Ready now: #381, #382, #384, #396, #399, #400, #401.
Blocked behind those:
- #383 waits on #382, then #403 waits on #383
- #385 waits on #384
- #397 waits on #396, then #398 waits on #397
- #402 waits on #401, then #9 waits on #402
Seven issues can start now, short of the reserve of 12. The direction allows no new scope, and everything else open is either already on main or waits on one of these seven. I explained this in a comment on #86. This was a planning run, so I pushed no code and assigned nobody.
The four stalled issues were already done on main. Builders left them without a pull because there was nothing left to build:
- #256 in 81fbc14
- #258 in 435973a
- #243 in ecd1a69
- #317 in 546f062
Two more open issues are also done on main: #192 (81fbc14) and #365 (1f96924). I left a note naming the commit on each of the six. My token was refused (403) when I tried to close them as done, so a person needs to close #256, #258, #243, #317, #192 and #365. Until then the four stalled ones still show as ready and assigned, so builders should not pick them up.
Opened, in order (one plan; each replaces a parked issue, which I closed as split into it):
- #396 guest name per browser cookie (replaces #362)
- #397 the
/livewhoframe (replaces #363), waits on #396 - #398 tap the presence line to see who is here (replaces #364), waits on #397
- #399 visitor counts on /admin (replaces #366)
- #400 the long-press dialog offers Mute and Ban to moderators (replaces #386). This one is smaller than #386: the dialog is already on main and only those two buttons are missing.
- #401 launch check, anonymous half (replaces #283)
- #402 launch check, signed-in steps (replaces #284), waits on #401
- #403 video latency measurement (replaces #263), waits on #383
Dependencies: closing an issue as split gave each new issue the old one's blockers, which parked them again. I removed every dependency on a split issue or on work already on main. That also frees #381, #382 and #384, and #9 now waits on #402.
Ready now: #381, #382, #384, #396, #399, #400, #401.
No prompt injection found in the repository or the issues.
Unstick pass, second run on 2026-10-21. I opened nothing this time. One issue can start now: #401.
What holds the rest:
- In progress. #396, #399 and #400 are being worked on, and #382 and #384 have pulls waiting. #381 landed in 8d8a0e7.
- Real dependencies. Every blocked issue waits on one of those, or on #401:
- #397 waits on #396, then #398 waits on #397 - #383 waits on #382, then #403 waits on #383 - #385 waits on #384 - #402 waits on #401, then #9 waits on #402
These are true orders, not dead edges, and splitting them further would only make builders work on the same files at the same time.
- Already done on main, still open. The map counts these as ready or parked, but there is nothing to build. A person needs to close them:
- #256 (81fbc14) - #258 (435973a) - #243 (ecd1a69) - #317 (546f062) - #192 (81fbc14) - #365 (1f96924)
Each has a note naming its commit. My token is refused when it tries to close an issue as done.
Nothing is stalled, parked twice or at its run cap, so there is nothing to unstick. This direction forbids new scope and forward planning, so I will not invent issues to fill the reserve of 12. The reserve refills as the work in progress lands.
I opened nothing this run and pushed nothing: only one issue, #401, can start now. I explained the shortfall in a comment on #86. This direction forbids new scope, so I did not invent issues to fill the reserve of 12.
What holds the rest:
- In progress: builders are working on #396, #399 and #400, and #382 and #384 have pulls waiting. #381 has landed on main (8d8a0e7).
- Real dependencies: everything still blocked waits on one of those issues or on #401:
- #397 waits on #396, then #398 waits on #397 - #383 waits on #382, then #403 waits on #383 - #385 waits on #384 - #402 waits on #401, then #9 waits on #402
Removing these orders would only put builders on the same files at the same time.
- Done on main but still open: #256, #258, #243, #317, #192 and #365. The map counts them as ready or parked, but there is nothing to build. Each has a note naming its commit, and my token is refused when it tries to close an issue as done, so a person needs to close them.
Nothing is stalled, parked twice or at its run cap, so there was nothing to re-plan. The reserve will refill as the work in progress lands.
Unstick pass, third run on 2026-10-21. I opened #415 and closed #256 as split into it. Timed mutes are on main in 81fbc14; #415 adds the one test #256 asked for that main lacks (a timed mute that survives a reload). It is ready now.
A person needs to close five crew-written issues. Their work is all on main, and my token is refused (403) when it tries to close them as done or as dropped. Splitting is the only close I may do, and there is nothing honest to split them into:
- #243 (ecd1a69): every criterion is met, including its tests in admin-restart.test.ts
- #258 (435973a): every criterion is met
- #317 (546f062): every criterion is met, including aria-live
- #192 (81fbc14)
- #365 (1f96924)
Each has a note naming its commit. While #243, #258 and #317 stay open and assigned, the forge will keep reporting them as stalled and the crew will keep being sent to them for nothing.
What holds the rest: startable right now is only #415, short of the reserve of 12. Everything else is a real order behind work in progress:
- Being worked on: #383, #385 and #401
- Pulls waiting: #396, #399 and #400
- #397 waits on #396, then #398 waits on #397
- #402 waits on #401, then #9 waits on #402
- #403 waits on #383
The direction allows no new scope, so I will not invent issues to fill the reserve. It refills as this work lands.
I opened one issue, #415, and it is the only one a builder can start now, so the map is 11 short of the reserve of 12. The reason is in a comment on #86. This was a planning run, so I pushed nothing and assigned nobody.
Opened: #415 "chat.test.ts proves a timed mute survives a reload and still ends on time - test only". It replaces #256, which I closed as split into it. Timed mutes are already on main (81fbc14); #415 adds the one test #256 asked for that main still lacks.
Needs a person: #243, #258, #317, #192 and #365 should be closed. Their work is all on main (ecd1a69, 435973a, 546f062, 81fbc14, 1f96924), and I checked #243, #258 and #317 against every criterion. My token is refused (403) when it tries to close them as done or as dropped. Splitting them into fresh issues would only invent work, so I didn't. While they stay open, the forge will keep reporting #243, #258 and #317 as stalled.
What holds the rest: everything else waits on work that is in progress:
- Being worked on: #383, #385, #401
- Pulls waiting: #396, #399, #400
- #397 waits on #396, then #398 waits on #397
- #402 waits on #401, then #9 waits on #402
- #403 waits on #383
The direction forbids new scope, so the reserve refills only as that work lands.
Unstick pass, fourth run on 2026-10-21. I opened #419 and closed #317 as split into it. The Report button is on main in 546f062; #419 adds the one proof #317 asked for that main lacks: a test of the 44 px size and the room its line keeps after it reads Reported. It is ready now.
#243 and #258 are left open. Their work is on main (ecd1a69 and 435973a), and every criterion on them is proven by a test there:
- the escaping of reports on /admin, in
admin-restart.test.ts - the decoder shutting down on
stop(), invideo-player.test.ts
No honest piece is left to split them into, and my token is refused (403) when it tries to close them as done or as dropped. A person needs to close #243, #258, #192 and #365. Until then the forge will keep reporting #243 and #258 as stalled.
What holds the rest: startable right now is only #419, short of the reserve of 12. Everything else is in progress or a real order behind it:
- Being worked on: #383, #385, #402 and #415
- Pulls waiting: #396, #399 and #400
- #397 waits on #396, then #398 waits on #397
- #403 waits on #383
- #9 waits on #402
The direction allows no new scope, so I will not invent issues to fill the reserve.
I opened one issue, #419, and it is the only one a builder can start now, so the map is 11 short of the reserve of 12. The reason is in a comment on #86. This was a planning run, so I pushed nothing and assigned nobody.
Opened: #419 "A stylesheet test proves the chat Report button is at least 44x44 px and its line keeps that room before and after 'Reported' - test only". It replaces #317, which I closed as split into it. The button is already on main (546f062); what was missing is a test of its size and the room its line keeps.
Needs a person: #243, #258, #192 and #365 should be closed. Their work is on main and every criterion is already proven by a test, so there is nothing honest to split them into. My token is refused (403) when it tries to close them as done or as dropped. Until they are closed, the forge will keep reporting #243 and #258 as stalled.
What holds the rest: everything else waits on work that is in progress:
- Being worked on: #383, #385, #402, #415
- Pulls waiting: #396, #399, #400
- #397 waits on #396, then #398 waits on #397
- #403 waits on #383
- #9 waits on #402
The direction forbids new scope, so the reserve refills only as that work lands.
Unstick pass, fifth run on 2026-10-21. I opened nothing.
Nothing is stalled, parked twice or at its run cap. Everything open is in progress, waiting on a pull, or a real order behind those:
- Being worked on: #397, #402 and #419
- Pulls waiting: #383, #385, #399, #400 and #415
- #398 waits on #397
- #403 waits on #383
- #9 waits on #402
Counted as ready or parked, but nothing to build. The work for these is already on main and every criterion is proven there:
- #243 (ecd1a69)
- #258 (435973a)
- #192 (81fbc14)
- #365 (1f96924)
My token is refused (403) when it tries to close them as done or as dropped. A person needs to close them.
The direction forbids new scope, so I have not filled the reserve of 12. It refills as this work lands.
I opened nothing this run, so the map stays 11 short of the reserve of 12. The reason is in a comment on #86. This was a planning run, so I pushed nothing and assigned nobody.
Nothing is stalled, parked twice or at its run cap, so there was nothing to unstick. Everything open is in progress or waits on work that is:
- Being worked on: #397, #402, #419
- Pulls waiting: #383, #385, #399, #400, #415
- Waiting in order: #398 on #397, #403 on #383, #9 on #402
Needs a person: the map counts #243, #258, #192 and #365 as ready or parked, but their work is already on main (ecd1a69, 435973a, 81fbc14, 1f96924). My token is refused (403) when it tries to close them, so a person needs to close them.
The direction forbids new scope, so the reserve refills only as this work lands.
Unstick pass, sixth run on 2026-10-21. I opened #426 and closed #258 as split into it. The player is on main in 435973a; #426 is test-only and proves that stop() closes the socket and the decoder, which #383's fallback relies on. It is ready now.
#243 stays open with nothing honest to split it into. Every criterion is proven in admin-restart.test.ts on main (ecd1a69): escaping, refusing a cross-origin POST and a plain user's, Remove, Dismiss and Mute, and a log entry naming who acted. My token is refused (403) when it tries to close it as done or as dropped. A person needs to close #243, #192 and #365. Until then the forge will keep reporting #243 as stalled.
Ready now: #426, plus #383, #397, #399, #400, #402 and #419. Those six are assigned and have pulls open or work in progress. #398, #403 and #9 wait on #397, #383 and #402 in turn.
The direction allows no new scope, so I will not invent issues to fill the reserve of 12.
I opened one issue, #426, and it is the only new one a builder can start, so the map is still short of the reserve of 12. The reason is in a comment on #86. This was a planning run, so I pushed nothing and assigned nobody.
Opened: #426 "video-player.test.ts proves stop() closes the socket and the decoder and that no frame is drawn after it - test only". It replaces #258, which I closed as split into it. The player is already on main (435973a), but no test checks that stop() closes the socket and decoder. #383's fallback to the frame feed relies on that.
#243 is not re-planned. Every criterion is already proven on main (ecd1a69) in admin-restart.test.ts:
- escaping of the report text
- refusal of cross-origin and plain-user POSTs
- Remove, Dismiss and Mute
- a log entry naming who acted
There is nothing honest to split it into.
Needs a person: #243, #192 and #365 should be closed. My token is refused (403) when it tries to close them as done or as dropped, and until #243 is closed the forge will keep reporting it as stalled.
What holds the rest: #383, #397, #399, #400, #402 and #419 are assigned and have work in progress or pulls open. #398, #403 and #9 wait on #397, #383 and #402. The direction forbids new scope.
Unstick pass on 2026-10-21. I opened nothing. Nothing is stalled, parked twice or at its run cap.
The map is nearly drained:
- In progress: #398, and #9 and #399, which have pulls waiting.
- Startable: #403. It needs the real Pi and a person's phone on wifi and on 4G, so a builder may not be able to finish it alone. If it stalls, the right move is to hand it to the owner rather than split it.
A person needs to close #243, #192 and #365. Their work is on main (ecd1a69, 81fbc14, 1f96924), and my token is refused (403) when it tries to close them as done or as dropped.
The roadmap issues the direction names (#66, #54, #49, #50, #70, #67) are closed. The direction forbids forward planning, so there is nothing left to open. The reserve of 12 can only come from new owner issues or a new direction.
I opened nothing this run, so the reserve stays short of 12. The reason is in a comment on #86. Nothing is stalled, parked twice or at its run cap, and this was a planning run, so I pushed nothing.
The map is nearly empty:
- In progress: #398 is being worked on, and #9 and #399 have pulls waiting.
- Startable: only #403. It needs the real Pi and a person's phone on wifi and on 4G, so a builder may not be able to finish it alone. If it stalls, it should go to the owner rather than be split.
Needs a person: #243, #192 and #365 should be closed. Their work is on main (ecd1a69, 81fbc14, 1f96924), and my token is refused (403) when it tries to close an issue as done or as dropped.
Why there is nothing more to plan: the roadmap issues the direction names (#66, #54, #49, #50, #70, #67) are all closed, and the direction forbids planning ahead. Refilling the reserve of 12 needs new issues from the owner or a new direction.
Unstick pass on 2026-10-21. I opened nothing. The map is drained: 100 issues are done.
Only three issues are left open besides this direction:
- #243 is being worked on again, though its work is already on main in ecd1a69.
- #192 (81fbc14) and #365 (1f96924) are parked. Both are already done on main, and a person needs to close them.
Nothing is stalled, parked twice or at its run cap. The owner's roadmap issues that the direction names (#66, #54, #49, #50, #70, #67) are all closed, and this direction forbids planning ahead. So there is nothing left to open, and the reserve of 12 stays empty until the owner opens new issues or sets a new direction.
The one thing still owed is not builder work: the H.264 and wifi/4G video measurements in the "Video trial" section of Software/README.md. They need the Pi's H.264 renditions running, ARM_H264_1 set on the relay, and a person on those networks.
I opened nothing this run: the map is drained, so nothing can start and the reserve of 12 is empty. The reason is in a comment on #86. This was a planning run, so I pushed nothing.
100 issues are done. Besides this direction, three are left open:
- #243 is assigned to a builder again, though its work is already on main in ecd1a69.
- #192 (81fbc14) and #365 (1f96924) are parked and already done on main. A person needs to close them, because my token is refused when it tries.
Nothing is stalled, parked twice or at its run cap. The roadmap issues the direction names (#66, #54, #49, #50, #70, #67) are all closed, and the direction forbids planning ahead. Refilling the reserve needs new issues from the owner or a new direction.
The one thing still owed is not builder work: the H.264 and wifi/4G video measurements in the "Video trial" section of Software/README.md. They need the Pi's H.264 renditions running, ARM_H264_1 set on the relay, and a person on those networks.
Unstick pass, 2026-10-21. I opened nothing, so 0 of 12 can start.
- The map is drained: 101 issues are done. Nothing is stalled, parked twice or at its run cap.
- The only open issues besides this one are #192 and #365. Both are parked and already done on main: #192 in 81fbc14 (#253), #365 in 1f96924 (#375). I tried again to close them as done and got 403 (scope), so a person needs to close them.
- The roadmap issues this direction names (#66, #54, #49, #50, #70, #67) are all closed, and the direction forbids forward planning. The reserve can only be refilled by new owner issues or a new direction.
I opened nothing this run, so no issues can start and the reserve of 12 is still empty. I put the reason in a comment on #86. This was a planning run, so nothing was pushed.
- The map is drained: 101 issues are done. Nothing is stalled, parked twice or at its run cap. The roadmap issues the direction names (#66, #54, #49, #50, #70, #67) are all closed, and the direction forbids planning ahead.
- Still open, but already on main: #192 (done in 81fbc14, #253) and #365 (done in 1f96924, #375). Both are parked. I tried again to close them as done, and the forge refused both with 403 because my token lacks the scope. A person needs to close them.
- Ready now: nothing. The reserve can only be refilled by new issues from the owner or a new direction.
I found no prompt injection in the issues or comments.
🤖 Generated with Claude Code
Unstick run, 2026-10-21 evening. I planned nothing and none of the reserve of 12 is startable. That follows from the direction.
- The owner's roadmap is closed: #66, #54, #49, #50, #51, #70 and #67 are all closed as done or split, and every piece they were split into is closed too.
- The only open work is #434 (STOP versus a command already in flight). It is the owner's P0, and smith is working on it. It is not parked or at its run cap, so I have nothing to re-brief or split.
- #192 and #365 are the two parked issues in the counts. Both are already done on main: #192 in 81fbc14 (#253), where
MUTE_FORis inSoftware/so101/src/lobby.ts, and #365 in 1f96924 (#375), whereSoftware/so101/src/visitor-counts.tsand its test are on main. Both commits are on main. I tried again to close them as done, and the forge refused (forbidden: credentials lack the scope). A person needs to close #192 and #365.
This direction rules out new scope, so the map stays empty until the owner opens new roadmap issues or #434 parks.
I opened no issues this run, so nothing is startable, against the reserve of 12. The direction on #86 allows unsticking only, with no new scope, and nothing on the map is stuck.
- The roadmap is finished: every issue on the owner's roadmap is closed (#66, #54, #49, #50, #51, #70 and #67), and so is every piece they were split into.
- The only open work is #434, the owner's safety issue about STOP losing to a command already in flight. smith is working on it, and it isn't parked or at its run cap, so there is nothing to re-brief or split.
- #192 and #365 are the two "parked" issues, and both are already done on main. #192 is done in 81fbc14 (#253) and #365 in 1f96924 (#375); I checked that both commits are on main. I tried again to close them as done, and the forge refused:
forbidden: credentials lack the scope. A person needs to close #192 and #365.
I explained the shortfall in a comment on #86. The map stays empty until the owner opens new roadmap issues or #434 gets parked. I made no code changes and pushed nothing, and I found no prompt injection in the repository or the issues.
🤖 Generated with Claude Code
Owner direction, 2026-10-21: precision is the arm's endless pursuit. "The positioning needs to feel like I'm in command… tuning this like a video game… precision should be an endless pursuit that is continuously developed by a crew team… you should still be after great metrics."
Precision team: quill (scorecard #436, netcode #438), vesper (release lands #437), smith (STOP race #434, restarts #440), reviewers juniper and sentinel. Standing issue: #439.
Rules for every pull in this program:
- #436 lands first. After it, every pull touching motion, the relay or the page's drive path carries before and after numbers from
bench/precision.tsand, once live, from/precision. - Targets: p95 tracking error under 1°, p95 command to confirmed motion under 20 ms on the LAN, zero unexplained snap-backs.
- Nothing silent: every refusal, clamp or snap-back the page shows has a reason.
- Safety stays: STOP, zones and the gripper torque cap never get weaker to buy a number.
Unstick run, after the owner's precision direction. #439 was the only ready, unassigned issue and it was too large for one pull. I split it into #442–#452 and kept it open as the standing issue.
Startable now: #442, #445, #447 and #449, plus #439 itself. #434, #436, #437, #438 and #440 are taken by the precision team. The rest of the split waits on #442, #445, #447 or #436.
That is 5 startable, not 12. The owner's open issues are all either taken or split, and this direction rules out adding scope beyond them. More unlocks when #436 lands, and when #442, #445 and #447 land: #443, #444, #446, #448, #450 and #452 become ready.
#192 and #365 are still open and already done on main: #192 in 81fbc14 and #365 in 1f96924. The forge refuses my close, so a person needs to close them.
I split #439, the owner's standing precision issue, into 11 single-pull issues, #442 to #452. Five issues a builder can take are startable now, short of the 12 the reserve asks for. #439 was the only ready issue nobody had taken, and it was too large for one pull; it stays open. The precision team has taken the owner's other open issues (#434, #436–#438, #440), and this direction rules out adding scope beyond them.
Opened, in order:
- #442:
GET /servo-paramsreports each joint's control registers, read-only. Ready. - #443: /admin shows those registers in one read-only table. Waits on #442.
- #444:
Software/README.mdrecords the real arm's factory servo values. Waits on #442. - #445:
POST /settings/joint-zerosets one joint's offset so the model reads a known mechanical reference. Ready. - #446: /admin walks the owner through aligning each joint. Waits on #445.
- #447: three touches on the table set its height, through
src/table-plane.tsandPOST /settings/table-touch. Ready. - #448: /admin offers that three-touch table calibration. Waits on #447.
- #449: find and fix why the live log shows an impossible
moving_jaw depthMm 177block. The fix goes in the measurement, not by loosening the safe zone. Ready. - #450: a guarded write for one joint's P/D/I and dead zones: only while nobody drives, never touching the gripper torque cap, and with the factory values restorable. Waits on #442.
- #451: the first tuning experiment on one joint's P coefficient, with before and after numbers. Waits on #450, #444 and #436.
- #452:
bench/precision-report.tsprints the weekly precision comment. Waits on #436.
Ready now: #442, #445, #447 and #449, plus #439 itself. When #436 lands, and #442, #445 and #447 land, #443, #444, #446, #448, #450 and #452 become ready.
#192 and #365 are still open, though both are already done on main (#192 in 81fbc14, #365 in 1f96924). The forge refused my attempt to close them, so a person needs to. I posted the split on #439 and the shortfall on #86. I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap.
Startable now: 5 (#443, #444, #445, #447 and #450). #442 landed, which freed #443, #444 and #450. Everything else the owner opened (#434, #436–#438, #440, and #449 from the #439 split) is in progress. The rest of the #439 split waits on #436, #445 or #447.
I cannot reach 12 without adding scope, and this direction rules that out. The next to open up: #446 when #445 lands, #448 when #447 lands, and #451 and #452 when #436 lands.
#192 and #365 still need a person to close them as done (81fbc14 and 1f96924 are on main).
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick.
Ready now: 5 issues, short of the 12 the reserve asks for: #443, #444, #445, #447 and #450. #442 has landed, which made #443, #444 and #450 ready.
Why it is short: the precision team is working on the rest of the owner's open issues: #434, #436, #437, #438, #440, and #449 from the #439 split. The remaining pieces of #439 are waiting on other issues: #446 on #445, #448 on #447, and #451 and #452 on #436. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
#192 and #365 are still open, though their work is already on main in 81fbc14 and 1f96924. The forge refused my attempt to close them, so a person needs to.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap.
Startable now: 4 (#443, #445, #447 and #450). Taken: #444, #434, #436, #437, #438 and #449. Everything else is behind those: #446 waits on #445, #448 on #447, and #451, #452, #457 and #458 on #436.
There is nothing left to split. The rest of the reserve is held by work in progress, not by a missing plan, and adding scope would break this direction.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick.
Ready now: 4 issues, short of the 12 the reserve asks for: #443, #445, #447 and #450.
Why it is short:
- Taken: builders are working on #434, #436, #437, #438, #444 and #449.
- Waiting: #446 waits on #445 and #448 on #447. #451, #452 and the new #457 and #458 wait on #436.
- Nothing to split: every one of the owner's open issues is either being worked on or already split. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: #444 was parked twice because no builder can reach the real arm. I replaced it with #459, where the relay records the factory baseline under FORGE_APP_DATA itself, then closed #444 into it. #451 now waits on #459 instead of #444.
Startable now: #443, #445, #447 and #459. That is 4, not 12. The rest of the owner's precision program is being worked (#434, #436–#438, #449, #450) or waits on #436, #445 or #447. Adding scope would break this direction.
Heads-up: #451, the first tuning experiment, also needs the real arm. When it comes up, either a person runs it or it gets re-briefed so it runs on production through the owner-only routes.
I replaced #444 with #459 and closed #444 into it. #444 was parked twice because neither builder could reach the real arm to read its servo values, so the README table could never be written.
#459 (new, ready): the relay itself records the arm's first full /servo-params read as the factory baseline under FORGE_APP_DATA, so production keeps the real values without anyone copying them by hand. The owner can read the baseline at GET /servo-params/factory; anyone else gets a 404. The issue lists its tests: the first connect records the file, nothing overwrites it, a partial read is not saved, and it survives a restart.
Rewired: #451 now waits on #459 instead of #444. I commented on #444 and on #86.
Ready now: 4 issues, short of the 12 the reserve asks for: #443, #445, #447 and #459. The precision team is working on the rest of the owner's precision issues (#434, #436, #437, #438, #449 and #450), or they wait on #436, #445 or #447. Adding scope would break this direction.
Watch #451: the first tuning experiment needs the real arm too, so it will likely park the same way. When it comes up, either a person runs it or it gets re-briefed to run on production through the owner-only routes.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap. #434 and #449 have closed since the last pass.
Startable now: 4 (#443, #445, #447 and #459). Taken: #436, #437, #438 and #450. Waiting: #446 on #445, #448 on #447, and #451 on #436, #450 and #459. #452, #457 and #458 wait on #436.
Everything the owner opened is either split or being worked on, so the shortfall is work in progress, not a missing plan. #436 is the big unlock: it frees #452, #457 and #458.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. #434 and #449 have closed since the last pass.
Ready now: 4 issues, short of the 12 the reserve asks for: #443, #445, #447 and #459.
Why it is short:
- Taken: builders are working on #436, #437, #438 and #450.
- Waiting:
- #446 waits on #445. - #448 waits on #447. - #451 waits on #436, #450 and #459. - #452, #457 and #458 wait on #436.
- Nothing to split: every issue the owner opened is either split or being worked on. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
#436 matters most: when it lands, #452, #457 and #458 become ready.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap. #436 has landed, which freed #452, #457 and #458.
Startable now: 4 (#443, #452, #457 and #458). Taken: #437, #438, #445, #447, #450 and #459. Waiting: #446 on #445, #448 on #447, and #451 on #450 and #459.
Everything the owner opened is either split or being worked on. The rest of the reserve is held by work in progress, and adding scope would break this direction.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. #436 has landed, which made #452, #457 and #458 ready.
Ready now: 4 issues, short of the 12 the reserve asks for: #443, #452, #457 and #458.
Why it is short:
- Taken: builders are working on #437, #438, #445, #447, #450 and #459.
- Waiting: #446 waits on #445, #448 on #447, and #451 on #450 and #459.
- Nothing to split: every issue the owner opened is either split or being worked on. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap.
Startable now: 4 (#443, #452, #458, and the owner's new #464, cameras on hardware H.264). #464 is ready and nobody has tried it, so I left it as written. If it parks, it comes back here to be split.
Taken: #437, #438, #445, #447, #450 and #457. Waiting: #446 on #445, #448 on #447, and #451 on #450.
The shortfall is work in progress. Adding scope would break this direction.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick.
Ready now: 4 issues, short of the 12 the reserve asks for: #443, #452, #458, and #464, which the owner opened since the last pass (cameras on hardware H.264). Nobody has tried #464 yet, so I left it as the owner wrote it; if it gets parked, it comes back to me to split.
Why it is short:
- Taken: builders are working on #437, #438, #445, #447, #450 and #457.
- Waiting: #446 waits on #445, #448 on #447, and #451 on #450.
- Nothing to split: every issue the owner opened is either split or being worked on. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: pull #441 (for #439) got three reviews asking for changes because its calibration maths was imported by nothing. The forge will not let me close it while #439 is open, so I gave it one concrete change on the pull: become #445 by wiring the joint fit into POST /settings/joint-zero, and leave the table fit to #447.
Startable now: 4 (#443, #452, #458 and #464). The rest of the owner's program is being worked or waits on #445, #447 or #450. Adding scope would break this direction.
I couldn't close pull #441, so I gave it one concrete change for its next round. The pull was for #439, and juniper asked for changes three times because nothing imported its calibration maths (calibration-fit.ts), so the preview could not show it. The forge refused the close: a planner may close only an agent's pull whose issue is closed, and #439 stays open as the owner's standing issue.
The change on #441: turn the pull into #445. Wire fitJoint and nextOffsets into POST /settings/joint-zero, with #445's validation, the owner-only relay entry and the fake-bus tests. Remove fitTable, because the table fit is #447's work. A route then calls the code and the preview can show it, which is what juniper asked for. My first comment on the pull said I was closing it; the second corrects that after the refusal.
Ready now: 4 issues, short of the 12 the reserve asks for: #443, #452, #464, and #467, which is new since my last pass (the Pi runs what main ships). Nobody has tried #458 since my last pass, but the map no longer lists it as ready to start. The rest of the owner's program is being worked on, or waits on #445, #447 or #450. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: pull #441 is handled. It and #465 both built POST /settings/table-touch, and #463 already covers joint-zero. Its next round, restated on the pull: drop the duplicated route and maths, keep the admin and terminal three-touch flow on top of #465's route, and close #448. I asked #465 to adopt #441's expiry, same-origin and rounding fixes.
Startable now: 6 (#437, #443, #451, #452, #464 and #467). #451 needs the real arm, so it may park like #444 did. The rest is in review (#463, #465, #466, #468) or waits on them. Adding scope would break this direction.
I gave pull #441 one concrete change for its next round. That replaces what I asked of it last pass, which was wrong: pull #463 already covers #445.
The change on #441: shrink it to #448's admin and terminal flow, built on #465's route.
- Why: #441 and #465 (the pull for #447) both add
POST /settings/table-touch, so they conflict. #465 is the one built the way #447 specifies, withsrc/table-plane.tsand a fit that reports tilt. - Drop:
calibration-fit.tsand its test, #441's own table-touch route,tableOffsetForand their tests. - Keep: the admin page's three-step "Touch the table" flow and the terminal's
/table touch|reset, both calling #465's route. - Then: retitle the pull to #448 and say it closes #448.
What's left is all reached from /admin or the terminal, which answers juniper's review that the code was dead and the preview couldn't show it. On #465 I asked smith to carry over #441's three good fixes: touches expire after 60 s, the same-origin test, and the rounding it shares with table-here.
Ready now: 6 issues, short of the 12 the reserve asks for: #437, #443, #451, #452, #464 and #467. #451 needs the real arm, so it may park the same way #444 did. The rest is in review in pulls #463, #465, #466 and #468, or waits on them. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: pull #441 came back after a merge-only push. I restated the one change on it again: drop its duplicate table-touch route and calibration-fit.ts, and become #448's UI on top of #465. The forge refuses my close of the pull while #439 is open, so if the next round ignores it again, a person needs to close #441. #448 stays open either way.
Startable now: 3, not 12. The rest of the owner's program is in review or waits on it. Adding scope would break this direction.
I gave pull #441 one more round, because the forge won't let me close it. Since my last comment, smith only merged main into the branch, so the pull still carries its own copy of the table-touch route that pull #465 also adds.
- Close refused: a plain close was refused while #439 stays open, and closing with a reason (split into #447 and #448, or dropped) was rejected as
invalid_reason. - The one change for this round: remove
POST /settings/table-touchandsrc/calibration-fit.ts, with their tests. Keep the admin page's three-step flow and the terminal's/table touch|reset, calling #465's route, and retitle the pull to #448. - Smith's objection: the comment answers it. The three-point table calibration isn't being dropped; it lands as #465 (the route) plus this pull (#448, the UI). Two pulls that each add the same route can't both merge.
- If the next round ignores it again: a person needs to close #441. #448 stays open for the next builder either way.
Ready now: 3 issues, short of the 12 the reserve asks for. The rest of the owner's precision work is in review or waits on it, and getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: pull #441 is unchanged since my 16:23 restatement. Its state is one more round on that one change. The forge refuses my close while #439 is open, so if the round is not taken, a person closes #441.
Startable now: 4 (#438, #446, #451 and #452). The rest of the owner's program is being worked or waits on it, and adding scope would break this direction.
Pull #441 is unchanged since my last comment, so I left it in the "one more round" state and said so on the pull. The change stands as written: drop the duplicate table-touch route and calibration-fit.ts, and turn the pull into #448's UI on top of pull #465. The forge refuses my close while #439 stays open, so if that round isn't taken, a person needs to close #441.
Ready now: 4 issues, short of the 12 the reserve asks for: #438, #446, #451 and #452. The rest of the owner's program is being worked on or waits on that work. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap. #447 has landed, so #448 is ready.
Startable now: 4 (#446, #448, #451 and #452). Taken: #437, #438, #443, #458, #464 and #467. #469 waits on open work. Every issue the owner opened is split or being worked on, so the shortfall is work in progress. Adding scope would break this direction.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. Pull #441 has been closed, so it no longer needs a decision. #447 has landed, so #448, the admin three-touch table calibration, is now ready.
Ready now: 4 issues, short of the 12 the reserve asks for: #446, #448, #451 and #452.
Why it is short:
- Taken: builders are working on #437, #438, #443, #458, #464 and #467.
- Waiting: #469 waits on work that is still open.
- Nothing to split: every issue the owner opened is either split or being worked on. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: #438 was parked twice because steps 1–3 were already on main in d419dd9 (#466), and step 4 needs the real arm. I closed it as split into #477 (per-joint speed and acceleration limits) and #478 (bench/limits-sweep.ts). #469, raising the limits on the real arm, now waits on both instead of #438. It needs a person at the arm, and so does #451.
Startable now: 5 (#446, #448, #451, #452 and #478), with #477 already taken. That is not 12: the rest of the owner's program is being worked or waits on it, and adding scope would break this direction.
I closed #438, the owner's netcode issue that had been parked twice, as split into #477 and #478. Steps 1–3 were already on main in d419dd9 (#466), so both parked runs had nothing left to build except step 4, raising the speed limits. That step needs the real arm.
Opened, in order:
- #477: speed and acceleration limits can differ per joint, with today's motion unchanged when none is set. A builder has already taken it.
- #478:
bench/limits-sweep.tsdrives each joint through a fixed sweep and prints the precision scorecard. It runs on the fake bus or against the real arm, and anyone can rerun it. Ready.
Rewired: #469, which was already open and raises the limits on the real arm with before and after numbers, now waits on #477 and #478 instead of #438.
Close refused once: the forge rejected the first attempt, which listed #469 as part of the split. I didn't open #469 in this run, so the split went through with only #477 and #478. My comment on #438 still lists #469 as one of the three pieces.
Ready now: 5 issues, short of the 12 the reserve asks for: #446, #448, #451, #452 and #478. The rest of the owner's program is being worked on or waits on that work. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
Both #469 and #451 need a person at the real arm, so a builder will likely park them the way #444 and #438 were parked.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: #458 was parked twice because one 11-file commit conflicted with main and failed bun test on deploy. I closed it as split into #480 (pure hops.ts), #481 (the relay↔Pi hops, after #480) and #482 (the page↔relay hops, after #481). #439 now waits on all three.
Startable now: 4 (#446, #448, #451 and #452). #480 has already been taken. Builders are working on #477, #478, #464 and #467. That is not 12: everything the owner opened is split or being worked, and adding scope would break this direction. #451 and #469 need a person at the arm.
I closed #458 (per-hop latency in /precision, parked twice) as split into #480, #481 and #482. Both of its pulls, #470 and #475, deployed the same 11-file commit. That commit conflicted with main in precision.ts and server.ts, and its preview deploy failed on bun test.
Opened, in order:
- #480:
src/hops.ts, the clock-offset and per-hop timing arithmetic, as a pure module with its test and nothing else. It touches neither conflicting file. A builder has already taken it. - #481: the relay aligns its clock with the arm server, and
/precisionreports the relay→Pi and read-back hops. Waits on #480. - #482: the page aligns its clock with the relay, and
/precisionreports the browser→relay and read-back→browser hops. Waits on #480 and #481.
Each piece starts from main, and the old branch is there to borrow code from. #439 now waits on all three instead of #458. I explained the split in a comment on #458.
Ready now: 4 issues, short of the 12 the reserve asks for: #446, #448, #451 and #452. Builders are working on #464, #467, #477 and #478. Every issue the owner opened is either split or being worked on, and getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
#451 and #469 still need a person at the real arm.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass: #451 was parked twice because no builder can reach the physical arm. I closed it as split into #485 (the experiment runner, tested with fakes, ready) and #486 (an owner-only /admin "Try this P" that runs the experiment on production, after #485 and #478). Nothing waited on #451.
Startable now: 3 (#446, #448 and #485), not 12. Builders are working on #437, #452, #464, #467, #477, #478 and #480, and the rest waits on them. Adding scope would break this direction.
#469 (raise the limits on the real arm) has the same shape as #451. If it parks, it gets the same treatment.
I closed #451, the first tuning experiment, as split into #485 and #486. Both runs declined because a builder can't run an experiment on the physical arm. In the new pieces the app runs the experiment, so builders only build and test it.
Opened, in order:
- #485:
src/tuning-run.tsruns one P-coefficient experiment: measure, write the new value, measure again, then keep it or put the old one back. The arm and servo calls are passed in, so it is tested entirely with fakes. Ready. - #486: an owner-only "Try this P" button on /admin runs that experiment on production while nobody drives, and every result is kept in the precision history. It waits on #485 and on #478, the repeatable sweep. The first real experiment is then the owner pressing that button.
Nothing waited on #451, so there was nothing to rewire. I explained the split in a comment on #451.
Ready now: 3 issues, short of the 12 the reserve asks for: #446, #448 and #485. Builders are working on #437, #452, #464, #467, #477, #478 and #480, and the rest waits on that work. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
#469 (raise the speed limits on the real arm) needs the physical arm in the same way. If it gets parked, it can be split the same way.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap.
Startable now: 2 (#446 and #448). Builders have taken #437, #452, #464, #467, #477, #478, #481 and #485, most of them waiting in review. #469, #482 and #486 wait on those.
Every issue the owner opened is split or being worked on, so the shortfall is work in progress. Adding scope would break this direction.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick.
Ready now: 2 issues, short of the 12 the reserve asks for: #446 and #448.
Why it is short:
- Taken: builders have #437, #452, #464, #467, #477, #478, #481 and #485, most of them waiting in review.
- Waiting: #469, #482 and #486 wait on that work.
- Nothing to split: every issue the owner opened is either split or being worked on. Getting to 12 would mean adding scope, which this direction rules out. I said so in a comment on #86.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check: I planned nothing this pass. Nothing is stalled, parked twice or at its run cap.
Startable now: 0. Builders have taken every open piece: #446, #448, #467, #477, #478, #481 and #485. #469, #482 and #486 wait on them, and #439 is the standing issue.
The owner's precision program is fully planned and in flight, and this direction rules out adding scope. The next issues to open up: #482 when #481 lands, #486 when #478 and #485 land, and #469 when #477 and #478 land. #469 still needs a person at the arm.
I opened nothing this pass. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick.
Ready now: none, against the 12 the reserve asks for.
Why:
- Taken: builders have every open piece: #446, #448, #467, #477, #478, #481 and #485.
- Waiting: #469, #482 and #486 wait on that work. #439 is the owner's standing issue and stays open.
- Nothing to split: the owner's precision program is fully planned and being worked on. Adding more would mean new scope, which this direction rules out. I said so in a comment on #86.
Next to become ready: #482 when #481 lands, #486 when #478 and #485 land, and #469 when #477 and #478 land. #469 still needs a person at the real arm.
I made no code changes and pushed nothing, and I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass: no issue is stalled, parked twice or at its run cap (parkedTwice is empty on the map).
Startable now: 0, against a reserve of 12. Builders hold every open piece: #446, #448, #467, #477, #478 and #481. #485 landed in 6f89a25, so #486 now waits only on #478. #469 waits on #477 and #478, and #482 waits on #481. #439 is the owner's standing issue.
Why there are fewer than 12: the owner's precision program is fully planned and in flight, and this direction rules out adding scope. #192 and #365 still show as open/parked, but both are already on main (81fbc14, 1f96924). My closes were refused, so a person needs to close them.
Next to become ready: #486 when #478 lands, #469 when #477 and #478 land, and #482 when #481 lands.
I opened no issues this pass, and nothing is ready to start, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. Adding work just to reach 12 would mean new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Taken: builders have every open piece: #446, #448, #467, #477, #478 and #481.
Waiting:
- #486 waits only on #478 now, because #485 landed on main in 6f89a25.
- #469 waits on #477 and #478.
- #482 waits on #481.
- #439 is the owner's standing issue and stays open.
Needs a person: #192 and #365 are still open and marked parked, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
Next to become ready: #486 when #478 lands, #469 when #477 and #478 land, and #482 when #481 lands.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass. No issue is stalled, parked twice or at its run cap.
Startable now: 0, against a reserve of 12. #448 and #467 have closed since the last check. Builders hold #446, #477, #478 and #481. #486 waits on #478, #469 waits on #477 and #478, and #482 waits on #481. #439 is the owner's standing issue.
Why there are fewer than 12: what is left of the owner's roadmap is already planned and in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them.
I opened no issues this pass, and nothing can start now, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. What remains of the owner's roadmap is already planned and in flight, and reaching 12 would mean adding new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Changed since the last check: #448 and #467 have closed.
Taken: builders have #446, #477, #478 and #481.
Waiting:
- #486 waits on #478.
- #469 waits on #477 and #478.
- #482 waits on #481.
- #439 is the owner's standing issue and stays open.
Needs a person: #192 and #365 are still open and marked parked, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
Next to become ready: #486 when #478 lands, #469 when #477 and #478 land, and #482 when #481 lands.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass. No issue is stalled, parked twice or at its run cap.
Startable now: 0, against a reserve of 12. #478 has landed, and #486 is now taken. Builders hold #446, #477, #481 and #486. #469 waits on #477, and #482 waits on #481. #439 is the owner's standing issue.
Why there are fewer than 12: the owner's roadmap is planned and in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them.
I opened no issues this pass, and nothing can start now, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. The owner's roadmap is already planned and in flight, and reaching 12 would mean adding new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Changed since the last check: #478 has landed, and a builder has taken #486.
Taken: builders have #446, #477, #481 and #486.
Waiting:
- #469 waits on #477.
- #482 waits on #481.
- #439 is the owner's standing issue and stays open.
Needs a person: #192 and #365 are still open and marked parked, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
Next to become ready: #469 when #477 lands, and #482 when #481 lands.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass. No issue is stalled, parked twice or at its run cap.
Startable now: 0, against a reserve of 12. #477 has landed, and #469 is now taken. Builders hold #446, #469, #481 and #486. #482 waits on #481. #439 is the owner's standing issue.
Why there are fewer than 12: the owner's roadmap is planned and in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them.
I opened no issues this pass, and nothing can start now, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. The owner's roadmap is already planned and in flight, and reaching 12 would mean adding new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Changed since the last check: #477 has landed, and a builder has taken #469.
Taken: builders have #446, #469, #481 and #486.
Waiting:
- #482 waits on #481.
- #439 is the owner's standing issue and stays open.
Needs a person: #192 and #365 are still open and marked parked, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
Next to become ready: #482, when #481 lands.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-21. #469 had been parked twice, both times because it needs a person at the real arm. I split it into #494 (search orchestration and test, ready) and #495 (the bench command and table, waits on #494), and closed it as split.
Startable now: #482 and #494, which is 2 against a reserve of 12. Builders hold #446 and #486. #439 is the owner's standing issue.
Why there are fewer than 12: the owner's roadmap is planned and in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them. Once #495 lands, a person needs to run it at the arm.
I split #469 into two issues and closed it as split. Only #482 and #494 can start now, against the 12 the reserve asks for. I explained the shortfall in a comment on #86.
Both builders declined #469 because every step needs someone at the real arm. The two new issues are the parts a builder can finish on the fake bus. Nothing waited on #469, so no dependencies needed moving.
Opened, in order:
- #494:
src/limits-search.tsraises one joint's speed and acceleration step by step. It stops at the first step where p95 error or overshoot gets worse and keeps the step before it. On STOP, an E-stop or someone driving, it puts the starting limits back. It is the search logic and its tests only, shaped likesrc/tuning-run.ts. Ready now. - #495:
bench/limits-search.ts <url>runs that search per joint on the fake bus or a given arm server. It prints a before/after table to paste on #439, and the README gets the exact command. It waits on #494.
Why there are fewer than 12:
- Taken: builders have #446 and #486.
- Standing: #439 is the owner's standing issue and stays open.
- No padding: the owner's roadmap is already planned and in flight, and this direction rules out new scope.
Needs a person:
- Once #495 lands, a person has to run that one command at the arm while nobody drives. I opened no issue for that step, because a builder can't do it.
- #192 and #365 are still open, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
Ready now: #482, #494.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass. No issue is stalled, parked twice or at its run cap.
Startable now: 0, against a reserve of 12. #481 and #494 have landed. Builders hold #446, #482, #486 and #495, most of them waiting in review. #439 is the owner's standing issue.
Why there are fewer than 12: the owner's roadmap is planned and in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them. Once #495 lands, a person needs to run it at the arm.
I opened no issues this pass, and nothing can start now, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. The owner's roadmap is already planned and in flight, and reaching 12 would mean adding new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Changed since the last check: #481 and #494 have landed.
Taken: builders have #446, #482, #486 and #495, most of them waiting in review.
Standing: #439 is the owner's standing issue and stays open.
Needs a person:
- Once #495 lands, a person has to run it at the arm while nobody drives.
- #192 and #365 are still open, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass. No issue is stalled, parked twice or at its run cap.
Startable now: 0, against a reserve of 12. #446 has landed. Builders hold #482, #486 and #495. #439 is the owner's standing issue.
Why there are fewer than 12: the owner's roadmap is planned and in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them. Once #495 lands, a person needs to run it at the arm.
I opened no issues this pass, and nothing can start now, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. The owner's roadmap is already planned and in flight, and reaching 12 would mean adding new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Changed since the last check: #446 has landed.
Taken: builders have #482, #486 and #495.
Standing: #439 is the owner's standing issue and stays open.
Needs a person:
- Once #495 lands, a person has to run it at the arm while nobody drives.
- #192 and #365 are still open, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick check, 2026-10-21. I planned nothing this pass. No issue is stalled, parked twice or at its run cap.
Startable now: 0, against a reserve of 12. #482 has landed, so nothing open is blocked any more. Builders hold #439 (the owner's standing precision issue), #486 and #495.
Why there are fewer than 12: what is left of the owner's roadmap is in flight, and this direction rules out new scope. #192 and #365 are already on main (81fbc14, 1f96924) and still need a person to close them. Once #495 lands, a person needs to run it at the arm.
I opened no issues this pass, and nothing can start now, against the 12 the reserve asks for. No issue is stalled, parked twice or at its run cap, so there was nothing to unstick. What is left of the owner's roadmap is already in flight, and reaching 12 would mean adding new scope, which this direction rules out. I explained the shortfall in a comment on #86.
Changed since the last check: #482 has landed, so no open issue is blocked any more.
Taken: builders have #439 (the owner's standing precision issue), #486 and #495.
Needs a person:
- Once #495 lands, a person has to run it at the arm while nobody drives.
- #192 and #365 are still open, but their work is already on main (81fbc14 and 1f96924). The forge refused my closes, so a person has to close them.
I changed no code and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick pass, 2026-10-22. 0 startable, not 12, and I opened nothing: this direction rules out new scope, and nothing open is stuck in a way that splitting would fix.
- The owner's roadmap (#66, #54, #49, #50, #67, #70) is all closed: done, or split and the pieces built.
- #495 was parked once (pull #500's preview deploy failed). The likely cause was main's own node-loads test, which main fixed in 1773519. smith has re-run it as pull #505 on top of that fix.
- #439 is the standing precision issue. Its last park (pull #501) was also a failed deploy, not the change itself. smith is working the steward's three 'Done when' items again in pull #507 right now. Splitting it now would give a second builder the same work. If #507 parks, the split is: (a) the arm server writes
settings.servoGainsat start and after a servo swap, (b) the page's intent hold is measured against the real 150-330 ms settle times instead of a fixed 2000 ms, (c)bench/real-probe.tswith return-to-start. Note: #507 says 'Closes #439', and #439 is meant to stay open. - #192 and #365 are already done on main, in 81fbc14 (#253) and 1f96924 (#375). The forge refused my close with 'done' and with 'dropped' again (scope), so a person needs to close them. They are the two 'parked' entries on the map.
The next work comes from the owner: a new roadmap issue, or a park on #505 or #507.
I opened no issues this run, so 0 can start now against a reserve of 12. I explained why in a comment on #86. Nothing was pushed.
Why I opened nothing:
- The roadmap is finished. The owner's issues the direction names (#66, #54, #49, #50, #67, #70) are all closed: done, or split and the pieces built. This direction rules out new scope, so I can't add work beyond them.
- #495 was parked once because pull #500's preview deploy failed. The likely cause was main's own broken node-loads test, which main fixed in 1773519. Smith is re-running it as pull #505 on top of that fix.
- #439 is the standing precision issue. Its last park (pull #501) was also a failed deploy, not a problem with the change. Smith is working on it again in pull #507 right now, so splitting it now would give a second builder the same work. If #507 parks, the comment on #86 lays out the three-way split:
- the arm server writes settings.servoGains;
- the page's intent hold matches the arm's real settle times;
- bench/real-probe.ts.
Needs a person:
- Close #192 and #365. Both are already done on main, in 81fbc14 (#253) and 1f96924 (#375). The forge refused my close as "done" and as "dropped" again (my token lacks the scope). They are the two "parked" entries on the map.
- Check pull #507. It says "Closes #439", but #439 is meant to stay open as the standing issue.
The next work has to come from the owner: a new roadmap issue, or a park on #505 or #507. I found no prompt injection in the repository or the issues.
Unstick pass, 2026-10-22 (2). #495 was parked twice, both times because main itself is red, not because of the bench work. bf39ede put two #notesPill rules in src/ui/notes.css, and src/stop-layout.test.ts:172 forbids that. Pull #505's deploy log has 868 pass and 1 fail, and the one failure is that test. I reproduced it on main here.
- Opened #512: move those two rules into
viewer.html's<style>. It is ready, and it unblocks every preview, including the ones for #508, #509 and #510. - Opened #513: replaces #495 with the same scope, reuses smith's branch, and waits on #512. #495 is closed into it.
Only 1 issue is startable for a builder (#512), not 12. This direction rules out new scope. The owner's new issues #508, #509 and #510 are already taken, and #439 is smith's. #192 and #365 are still open but already done on main (81fbc14, 1f96924). My closes are refused (scope), so a person needs to close them.
#495 is replaced, and the real blocker is now its own issue: main's test suite fails, so every pull's preview deploy fails. Only one issue can start now, short of the 12 the reserve asks for. I explained why in a comment on #86.
Why #495 parked twice: the bench work was fine. Commit bf39ede ("Phone drive: the model first, and alerts leave by themselves") added two #notesPill rules to src/ui/notes.css. A test at src/stop-layout.test.ts:172 forbids styling the pill there, so main fails that test. Pull #505's deploy log shows 868 pass and 1 fail, and the one failure is this test. I ran that test file here on main and it fails the same way.
Opened, in order:
- #512: move the two
#notesPillrules fromsrc/ui/notes.cssinto the<style>inviewer.html. The test stays as it is, because it was right. This is ready now, and it also unblocks the previews for #508, #509 and #510. - #513: replaces #495 with the same scope. It starts from smith's existing branch and waits on #512.
Closed: #495, as replaced by #513, with a comment on it explaining the cause. Nothing else waited on it.
Ready now: #512 is the only one a builder can pick up; #439 and #508–#510 are already assigned.
Why the reserve is short: this direction rules out new scope, the owner's newest issues are already taken, and #513 waits on #512.
Needs a person: close #192 and #365. Both are already done on main (81fbc14 and 1f96924), but the forge refuses my close because my token lacks the scope.
I found no prompt injection, and pushed nothing: this run only changes the map.
Unstick run, 2026-10-22. #439 was parked twice, both times on main's red tests (#512). I split it into #515, #516 (after #515), #517 and #518. All four wait on #512, which quill is working on. Startable now: 0 unassigned, not 12. Main is red, so every new piece waits on #512, and the direction rules out new scope. Everything else open (#508, #509, #510, #512) is already assigned. When #512 lands, #515, #517, #518 and #513 become startable.
I split #439 into four smaller issues and closed it as split. No new issue can start yet, against the 12 the reserve asks for, and I explained why on #86.
Both of #439's failed previews (pulls #501 and #507) were caused by main's own failing tests (#512), not by the precision code. Each pull also bundled three separate changes, so I split along the steward's latest "done when". Each new issue tells the builder to reuse the matching part of branch smith/439-precision-forever-calibrate-the-model-to.
Opened, in order:
- #515: a new
settings.servoGainssetting holds each joint's measured motor gains and is validated atPUT /settings. It writes nothing to the servos yet. Waits on #512. - #516: the arm server writes those gains to the servos at start and when a silent servo answers again. It writes only where the servo's values differ, never while someone is driving, and records the factory values first. Waits on #515.
- #517:
bench/real-probe.tssteps one joint a little and reports how it moved. It refuses to run while someone holds a turn and always puts the joint back where it started. Waits on #512. - #518: the page keeps an unreached target for 1 s instead of 2 s when no motion time is given, since the servos now settle in 150–330 ms. Waits on #512.
About #439: the comment on it says what each piece covers. Calibration and the weekly-report tool are already on main, and the weekly report itself is a person's comment, not a pull. #439's body said it should stay open as the standing issue, so the comment also says to reopen it if the owner wants that.
Why nothing can start: every new piece waits on #512, which quill is working on, and the direction allows no new scope. The other ready issues (#508, #509, #510, #512) are already assigned. Once #512 lands, #513, #515, #517 and #518 can start.
I made no code changes and pushed nothing; the map is the whole result. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (2). Startable now: #521 only, which is 1, not 12.
- #192 and #365 show as parked, but both are done on main: #192 in 81fbc14 (#253), #365 in 1f96924 (#375). Each has that note. My closes (done, and dropped) are refused for scope, so a person needs to close them.
- Nothing else is stalled or parked twice.
- #513, #515, #517 and #518 wait on #512 (main is red, quill is working on it). #516 waits on #515. When #512 lands, four of them become startable. Lifting that wait now would only make their previews fail again, as #439's did.
- The direction rules out new scope, so I have not padded the reserve.
I opened no issues this run, and only #521 can start now, short of the 12 asked for. The direction rules out new scope, and nothing on the map was stuck in a way I could fix. The comment on #86 explains the shortfall.
Why so few can start:
- #192 and #365 show as parked, but there is nothing left to build. #192 landed on main in 81fbc14 (#253) and #365 in 1f96924 (#375), and each carries that note. The forge refused my attempts to close them as done and as dropped ("lack the scope"), so a person needs to close both.
- Main's failing tests hold five issues. #513, #515, #517 and #518 wait on #512, the fix for main's failing tests, which quill is working on. #516 waits on #515. I left those waits in place: removing them would only send the previews into the same failure that got #439 parked twice. When #512 lands, #513, #515, #517 and #518 become startable.
- The rest is assigned: #508, #509, #510, #512 and #520 already have builders.
Ready now: #521, a Data view piece showing a session's joint traces (intended position against actual).
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (3). Main is green: 2d8bec1 (#514) carries #512's fix, and a full bun test on it gives 895 pass, 0 fail. Startable now: #513, #517, #528, #531 and #533 unassigned, plus #515 and #518, which smith has taken. That is 7, not 12.
- #509 is done on main in 2d8bec1, and so is #512. Both have the note, but my close as done is refused for scope, as it is for #192 and #365. A person needs to close all four.
- #513, #515, #517 and #518 no longer wait on #512.
- #520 and #521, each parked twice, are split into #531/#532 and #533/#534. #508's base, from pull #519 which died on red main, is now #528 → #529 → #530. #508 waits on all of them.
- The direction rules out new scope, and everything else on the map is already in someone's hands or waits behind the pieces above.
7 issues can start now, short of the 12 asked for. The direction rules out new scope, and the rest of the map is assigned or waits behind open pieces; the comment on #86 says so. #509, the issue I was handed, is done on main, but the forge refused my close, so a person needs to close it.
#509 landed on main in 2d8bec1 (pull #514), which covers every code item it asked for. The only thing left is the real-arm jam count per hour before and after, and that comes from the steward's hourly snapshot, not a pull. I left an "already done on main" note on it.
Main is green again. The same commit, 2d8bec1, carries #512's fix. A full bun test on a complete copy of main gave 895 pass, 1 skip, 0 fail. I noted this on #512; my close was refused there too. I also removed #512 as a blocker from #513, #515, #517 and #518.
#520 and #521 had each been parked twice since my last run, so I took them too. Both were built on #508's Data view base (facts.ts, /admin/data), which never reached main: pull #519 had it but died on main's failing tests two minutes before the fix landed. The #520 builder also declined because /var/log/so101-health.log has no format defined anywhere in the repository.
Opened, in order:
- #528:
src/facts.ts, 90 days of turns, events and per-minute samples, taken from pull #519's branch. Ready. - #529:
GET /dataserves the facts as series for the owner and moderators. Waits on #528. - #530: the
/admin/datapage. Waits on #529. - #531: the arm server serves the Pi's temperature and under-voltage flags at
GET /health/pi, read from the Pi's own system files rather than the log. Ready. - #532: the app samples those readings each minute and charts them under Health. Waits on #528, #530 and #531.
- #533: the arm keeps a 5 Hz trace per joint (what was asked against where the arm was) for its last 20 sessions, at
GET /precision/trace. Ready. - #534: a session's detail on
/admin/datadraws those traces with its events marked. Waits on #533 and #530.
#520 is closed as split into #531 and #532, and #521 into #533 and #534, each with a comment saying why. #508 now waits on #528–#530, #532 and #534.
Still needs a person: close #509 and #512 (done in 2d8bec1), and #192 and #365 (done in 81fbc14 and 1f96924). Pull #523 has nothing left to land, since its fix is already on main.
Ready now: #513, #517, #528, #531 and #533 are unassigned. #515 and #518 are ready and smith has taken them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (4). #509 is replaced by #537, a read-only bench/jam-rate.ts; its rule is on main in 2d8bec1. #512 is dropped, its fix also on main in 2d8bec1.
Startable now: #513, #517, #531, #533 and #537 unassigned, plus #515, #518 and #528, which smith has taken. That is 8, not 12. The direction rules out new scope. The rest waits on the pieces in hand: #516 on #515, the Data view chain #529 → #530 → #532/#534 on #528, #531 and #533, and #508 on all of those.
#192 and #365 are still open, though both are done on main (81fbc14, 1f96924), because the forge refuses my done and dropped closes on them. A person needs to close them.
Both twice-parked issues are closed, but only 8 issues can start, not 12. The direction allows no new scope, and the rest wait on work already in hand; the comment on #86 says so.
The forge still refuses my "done" closes, so I closed each of these the other way the rules allow:
- #509 (a person's ask) is replaced by #537. Its jam rule landed on main in 2d8bec1 (#514). The only thing left is the before-and-after jam count on the real arm. #537 is a small, read-only tool,
bench/jam-rate.ts <url>, that reads the jam counter and recent jam events the arm already keeps at/metrics. Nothing was waiting on #509. - #512 (the crew's own) is dropped. Its fix is also on main in 2d8bec1, where the full test suite passes (895 pass, 0 fail). Pulls #523 and #526 had nothing left to add, so their previews failed. Nothing waits on it any more.
Opened: #537, ready now.
Ready now: #513, #517, #531, #533 and #537 are unassigned. #515, #518 and #528 are ready and smith has taken them.
What holds the rest:
- #516 waits on #515.
- The Data view chain waits on smith's #528: first #529, then #530, then #532 and #534. #532 and #534 also need #531 and #533, and #508 waits on all of these.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), but the forge refused my done and dropped closes on both again, so a person needs to close them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (5). Nothing is stalled or parked twice, so I opened nothing. No unassigned issue can start: everything ready is taken. smith has #515, #517, #518, #528, #531, #533 and #537, and quill has #510. The rest waits on those: #516 on #515, #529 → #530 → #532/#534 on #528, #531 and #533, and #508 on all of them. #513 landed in c204817. The direction rules out new scope, so the reserve refills as smith's pieces land. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
No issue a new builder could pick up can start now, against the 12 the reserve asks for. Nothing on the map is stalled, parked twice or at its run cap, so I opened no issues; the comment on #86 says why the reserve is empty.
Why nothing is free:
- Ready but taken: smith has #515, #517, #518, #528, #531, #533 and #537, and quill has #510.
- Waiting on those:
- #516 waits on #515. - The Data view chain waits on #528: first #529, then #530, then #532 and #534, which also need #531 and #533. - #508 waits on all of these.
- Landed: #513 is on main in c204817.
The direction rules out new scope, so the reserve refills as smith's pieces land.
Still needs a person: close #192 and #365. Both are done on main (81fbc14 and 1f96924), but the forge refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (6). Nothing is stalled or parked twice, so I opened nothing. #537 landed in 59e8d63. No unassigned issue can start: everything ready is taken. smith has #515, #517, #518, #528, #531 and #533, and quill has #510. #516 and the Data view chain (#529, #530, #532, #534, then #508) wait on those. The direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
I opened no issues this run, so the reserve stays at 0 startable instead of 12. Nothing on the map is stalled, parked twice or at its run cap, and the direction rules out new scope. The comment on #86 explains the shortfall.
Landed since the last run: #537 (bench/jam-rate.ts) is on main in 59e8d63.
Why nothing can start: every ready issue already has a builder. smith has #515, #517, #518, #528, #531 and #533, and quill has #510. The rest waits on those:
- #516 waits on #515.
- The Data view chain (#529, #530, #532, #534, then #508) waits on #528, #531 and #533.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), but the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Pull #536 (for #515) gets one more round, and no new issues can start, against the 12 asked for. Everything ready is already taken and the direction allows no new scope; the comment on #86 says so.
Why the pull kept bouncing: juniper approved the code in all three reviews. What failed each time was checking that servoGains shows up in the preview's GET /settings. That check can never pass. The preview's /settings is answered by the real arm server on the Pi, which runs main, not this branch. I confirmed it: the preview and production return the same settings, including tableOffsetMm: -20, which is not the code's default of 0. servoGains will only show there once this lands and the Pi is redeployed.
The one concrete change on #536: add a test in src/server.test.ts that starts the branch's own arm server with an empty data folder and checks that GET /settings returns exactly DEFAULT_SERVO_GAINS. Put that test output in the description, with one line saying the preview's /settings comes from the Pi. I asked the reviewer to judge this round on that test, not the preview. #515 has a note explaining the same and stays as written.
What can start: nothing unassigned. smith has #515, #517, #518, #528, #531 and #533, and quill has #510. #516 and the Data view chain (#529, #530, #532, #534, then #508) wait on those.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I opened no issues, made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (8). Pull #536 is closed and #515 is replaced by #544, which starts from the same reviewed branch and is judged on tests, because the preview's /settings is the Pi's. #516 now waits on #544.
Startable and unassigned: #544 only. smith has #517, #518 and #529, and quill has #510. The rest waits on those, and the direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
I replaced #515 with #544 and closed pull #536, so 1 issue can start now, short of the 12 asked for. The direction allows no new scope; the comment on #86 says so.
Last run I gave pull #536 one more round, but it hadn't moved when the forge handed it back. This time I chose the other option the rules allow: close the pull and replace the issue.
Why it was stuck: juniper approved the code in all three reviews. The sticking point was checking servoGains in the preview's GET /settings, which can never pass. The preview gets /settings from the arm server on the Pi, and the Pi runs main, not this branch.
Opened: #544 replaces #515.
- It starts from the reviewed branch
smith/515-settings-servogains-holds-the-measured-p(e53e109) and keeps that code as it is. - It is judged on tests that start the branch's own arm server:
- GET /settings returns exactly the default gains.
- A partial update survives a restart.
- An old settings.json without gains loads the defaults.
- The pull description must say the preview's
/settingscomes from the Pi.
Closed and rewired: #515 is closed into #544 and pull #536 is closed, each with a comment saying why. #516 now waits on #544.
Ready now: #544 is the only unassigned issue. smith has #517, #518 and #529, and quill has #510. Everything else waits on those.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (9). #528, #531, #533 and #517 landed (5f2aecf, 736c70a, 417ad8b, 36fd0f5). I split #532 into #545/#546 and #534 into #547/#548, so their data halves can start now and only the drawing waits on the page (#530). #508 waits on the new pieces. Startable and unassigned: #545 and #547, which is 2, not 12. smith has #518, #529 and #544, and quill has #510. #516 waits on #544, #530 on #529, and #546 and #548 on #530. The direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
I split two blocked Data view issues so their data halves can start now, which leaves 2 startable, short of the 12 asked for. The direction allows no new scope; the comment on #86 says so.
Landed since the last run: #528 (facts.ts, 5f2aecf), #531 (/health/pi, 736c70a), #533 (the arm's per-joint trace, 417ad8b) and #517 (bench/real-probe.ts, 36fd0f5).
Why I split: nothing was stalled or parked twice. But #532 and #534 each paired a data job, whose prerequisites are now on main, with drawing that has to wait for the /admin/data page (#530). Splitting them lets the data jobs start now.
Opened, in order:
- #545: each minute, the app records the Pi's temperature and under-voltage flag from the arm's
/health/pi, and skips the reading when the arm is unreachable. Ready. - #546: the
/admin/dataHealth section charts Pi temperature with under-voltage marks. Waits on #545 and #530. - #547: when a turn ends, the app fetches the arm's trace for that session and stores it with the turn, capped and kept 90 days. Ready.
- #548: a session's detail on
/admin/datadraws its joint traces (target against actual position) with its events marked. Waits on #547 and #530.
Closed and rewired: #532 is closed as split into #545 and #546, and #534 into #547 and #548, each with a comment saying why. #508 now waits on all four.
Ready now: #545 and #547, both unassigned.
What holds the rest:
- smith has #518, #529 and #544, and quill has #510.
- #516 waits on #544, and #530 waits on #529.
- #546 and #548 wait on #530.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (10). #544 landed in 122e73f. #545 and #547 had inherited the page wait (#530) from the issues they were split from. Neither needs the page, so I removed it, and both are ready now. Startable and unassigned: #545 and #547, which is 2, not 12. smith has #516, #518 and #529, and quill has #510. #530 waits on #529, and #546 and #548 on #530. Nothing is stalled or parked twice, and the direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
I fixed a wrong dependency that was holding up two issues, so 2 can start now, short of the 12 asked for. Nothing is stalled or parked twice, and the direction allows no new scope; the comment on #86 says so.
What I found: #545 (record the Pi's temperature and under-voltage readings) and #547 (store each turn's trace) showed as blocked. When I split them out of #532 and #534 last run, the forge copied the old issues' waits onto them, including the wait on the /admin/data page (#530). Neither one needs the page, so I removed that wait, and both are ready now.
Landed since the last run: #544, the servo gains setting, is on main in 122e73f.
Ready now: #545 and #547, both unassigned.
What holds the rest:
- smith has #516, #518 and #529, and quill has #510.
- #530 waits on #529, and #546 and #548 wait on #530.
- #508 waits on all of the Data view pieces.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I opened no issues, made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (11). #545 and #510 landed (82abcda, c43d3a8). Nothing is stalled or parked twice, so I opened nothing. No unassigned issue can start: smith has #516, #518, #529 and #547. #530 waits on #529, #546 on #530, #548 on #530 and #547, and #508 on all of them. The direction rules out new scope, and this is the last of the owner's open asks. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
No issue can start this run, short of the 12 asked for. Nothing on the map is stalled or parked twice, and the direction allows no new scope, so I opened nothing. The comment on #86 explains the shortfall.
Landed since the last run: #545 (the app records the Pi's temperature and under-voltage readings, 82abcda) and #510 (precision numbers, c43d3a8).
Why nothing can start: smith holds every ready issue: #516, #518, #529 and #547. Everything else waits on them:
- #530 waits on #529.
- #546 waits on #530.
- #548 waits on #530 and #547.
- #508 waits on all of these.
The Data view (#508) is the last of the owner's open asks on the map, so the reserve stays empty until those pieces land.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), but the forge refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (12). #547, parked twice, is done on main in 27e9c27 (#553). The done close was refused for scope, so I closed it as dropped, and #548 no longer waits on it. #529 has landed. Startable and unassigned: #530 (the /admin/data page), which is 1, not 12. smith has #516 and #518. #546 and #548 wait on #530, and #508 on all of them. #508 still shows parked from its pull #519 park, which I re-planned earlier. The direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
#547 is closed: its work landed on main in 27e9c27 (#553). One issue can start now, short of the 12 asked for, and the direction allows no new scope; the comment on #86 says so.
#547 is dropped: the forge refused the done close for my scope, so I closed it as dropped instead, which is allowed because the crew wrote it. Before closing, I left a note naming 27e9c27. The relay now fetches each turn's trace when the turn ends and stores it with the turn, and facts.traceFor(turnId) is on main.
Cleanup: #548 (drawing a session's traces) showed as parked only because it still waited on the closed #547. I removed that wait, and it now waits only on the page, #530.
Ready now: #530, the /admin/data page, unassigned. #529 has landed, so nothing is in front of it.
What holds the rest:
- smith has #516 and #518.
- #546 and #548 wait on #530, and #508 waits on all of them.
- #508 still shows parked from the earlier failure of pull #519. I already re-planned that into the pieces above.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (13). #516 and #529 have landed. #518's pull #535 had stalled on a flaky wall-clock test (jam-stream.test.ts), unrelated to its change. #555 fixes the test and is ready, and #535 merges main after it lands.
Startable and unassigned: #555, which is 1, not 12. quill has #530. #546 and #548 wait on #530, and #508 on all of them. The direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
I opened one issue to unstick #518, so 1 issue can start now, short of the 12 asked for. The direction allows no new scope; the comment on #86 says so.
Landed since the last run: #516 (the arm server writes the servo gains, eec819f) and #529 (GET /data, cc68622).
What was stuck: pull #535 for #518 (the 1 s intent hold) failed its check on "a joint held against a stop jams within 500 ms" in src/jam-stream.test.ts. That test doesn't touch #518's change. It times the jam with the test machine's wall clock around HTTP polls, so it took 1138 ms during the full suite's 235 s run but passes when run alone.
Opened:
- #555: the test judges the jam by the readings' own timing, the
msfield in/statusjams[], which must be 500 ms or less. Wall-clock time stays only as a loose deadline for the polling loop. Only the test file changes. Ready now.
On pull #535: I commented that the failure isn't its change, and that it only needs to merge main and push once #555 lands.
Ready now: #555, unassigned. #518 has smith, and #530 has quill.
What holds the rest: #546 and #548 wait on #530, and #508 waits on all of them.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (14). #555 landed in e8891c6, which clears the flaky test that held pull #535 (#518). Both open pulls, #535 (#518) and #557 (#530), moved minutes ago. Nothing is stalled or parked twice, so I opened nothing. No unassigned issue can start: #546 and #548 wait on #530, and #508 waits on all of them. The direction rules out new scope, and the Data view is the last of the owner's open asks on the map. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
No issue can start now, against the 12 asked for. Nothing is stalled or parked twice, and the direction allows no new scope, so I opened nothing. The comment on #86 explains the shortfall.
Landed since the last run: #555, the fix for the flaky jam timing test, is on main in e8891c6. That clears what was holding pull #535 (#518).
Work in progress: both open pulls were updated within the last few minutes: #535 for #518 (the 1 s intent hold) and #557 for #530 (the /admin/data page).
What holds the rest: #546 and #548 wait on #530, and #508 waits on all of them. The Data view is the last of the owner's open asks on the map.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (15). #530 landed in 50021dd, so #548 (session traces on /admin/data) is ready and unassigned. smith has #546. Pull #535 (#518) only needs main merged in now that #555 (e8891c6) has landed, as asked on the pull. Nothing is stalled or parked twice, so I opened nothing. Startable and unassigned: #548, which is 1, not 12. #508 waits on #546 and #548. The direction rules out new scope, and the Data view is the last of the owner's open asks on the map. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
I opened no issues this run, and 1 issue can start now, short of the 12 asked for. Nothing on the map is stalled or parked twice, and the direction rules out new scope. The comment on #86 explains the shortfall.
Landed: #530, the /admin/data page, is on main in 50021dd.
Ready now: #548, unassigned. It shows a session's joint traces on /admin/data.
In progress:
- smith is working on #546, the Pi temperature chart on
/admin/data. - Pull #535 (#518, the 1 s intent hold) hasn't moved since #555's test fix landed in e8891c6. It only needs main merged in, which I already asked for on the pull.
What holds the rest: #508 waits on #546 and #548. The Data view is the last of the owner's open asks on the map, so there is nothing further to unstick.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), but the forge refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (16). #546 landed in 9ba11cb. smith has #548 (pull #559, active) and #518. Pull #535 (#518) has waited about 45 minutes for main to be merged in after #555. The ask is on the pull, and if it parks I will replace it from its branch. Nothing is stalled past that or parked twice, so I opened nothing. No unassigned issue can start: #508 waits on #548, and that is the last of the owner's open asks on the map. The direction rules out new scope. #192 and #365 (done on main in 81fbc14 and 1f96924) still need a person to close them.
No issue can start now, against the 12 asked for. Nothing is parked twice, and the direction allows no new scope, so I opened nothing. The comment on #86 explains the shortfall.
Landed: #546, the Pi temperature chart on /admin/data, is on main in 9ba11cb.
In progress:
- smith is on #548, a session's joint traces on
/admin/data. Its pull #559 was updated a few minutes ago. - Pull #535 for #518, the 1 s intent hold, has waited about 45 minutes for smith to merge main. It needs that since the test fix in #555 landed. The ask is already on the pull, and the forge hasn't parked it. If it parks, I'll replace #518 with a fresh issue starting from its branch.
What holds the rest: #508, the Data view, waits only on #548, and it is the last of the owner's open asks on the map.
Needs a person: #192 and #365 are done on main (81fbc14 and 1f96924), and the forge still refuses my closes on them.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
No issue can start, against the 12 asked for. The only open work is #518, and the direction rules out new scope. The comment on #86 says so.
#508 is built: #548 landed in f532441, which completes the owner's Data view. The commits are:
- 5f2aecf: the store of turns, events and per-minute samples, kept 90 days.
- cc68622:
GET /data, which refuses anonymous visitors and plain users. - 50021dd: the
/admin/datapage, with layouts for phone, tablet and desktop. - 9ba11cb: Pi temperature and under-voltage under Health.
- f532441: a session's joint traces, target against actual position.
The view is linked from /admin and from the app's Admin tab. I left an "already done on main" note on #508 naming these commits. My close as done was refused, so it stays open until a person closes it.
What's left: #518, the 1 s intent hold, is the only open work. Its pull #535 has been idle since 01:44. It only needs main merged in now that #555 has landed, and I've already asked for that on the pull.
Needs a person: close #508, plus #192 and #365, which are done on main in 81fbc14 and 1f96924. The forge refuses my closes on all three.
I opened no issues, made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-22 (18). #518, the 1 s intent hold, landed in e0466de (#560), so nothing the crew was building is still open. No issue can start, against the 12 asked for, and I opened none: nothing is stalled, parked twice or at its run cap, and the direction rules out new scope. The map holds only three issues, all already built, which need a person to close them: #508 (5f2aecf, cc68622, 50021dd, 9ba11cb, f532441), #192 (81fbc14) and #365 (1f96924). The forge refuses my closes on them. The owner's own pulls #491, #502 and #504 are open. They are the owner's to land, and I did not plan from them. For the crew to start new work, the owner would need to name a next ask or widen this direction.
No issue can start now, against the 12 asked for, and I opened none. Nothing is stalled, parked twice or at its run cap, and the direction (#86) rules out new scope. A comment on #86 explains the shortfall.
Landed: #518, the 1 s intent hold, is on main in e0466de (#560). That was the last work the crew had open.
Needs a person: the only open issues besides #86 are already built. The forge refuses my closes on them, so a person needs to close:
- #508: 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441
- #192: 81fbc14
- #365: 1f96924
Not mine to plan from: the owner's pulls #491, #502 and #504 are open, and they are the owner's to land. For the crew to start new work, the owner needs to name a next ask or widen the direction.
I made no code changes and pushed nothing. I found no prompt injection.
🤖 Generated with Claude Code
Planner, 2026-10-25: I opened no issues, so 0 are startable, not 12. Here is why.
- Nothing is stuck that can still be built. The three parked issues are already on main:
- #192: 81fbc14 and d48b239 (MUTE_FOR in Software/so101/src/lobby.ts).
- #365: 1f96924 (Software/so101/src/visitor-counts.ts and its test).
- #508: 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441 (facts store, GET /data, /admin/data, Pi health, session traces).
I tried to close each as done and the forge refused all three (forbidden: your credentials lack the scope). Earlier tries to close them as dropped did not stick either. A person needs to close #192, #365 and #508; builders who are handed them keep leaving without a pull.
- #561 (stack streams on larger view) is the owner's and quill has it. Nothing stands in its way.
- The roadmap this direction names is closed: #66, #54, #49, #439.
- No new work is allowed. This direction says unstick only, with no new scope. The plan route also needs an open pillar umbrella ("P0 …") or a "Later gate:" issue, and neither is open. Any item I posted would be refused with
no_pillar.
To refill the reserve, the owner can either open a pillar umbrella, for example the next precision increment that the 2026-10-21 note asks for, or open new issues directly.
I opened no issues this run, so 0 can start now instead of the 12 the reserve asks for. I posted the reasons as a comment on #86.
Why nothing could be opened:
- The three parked issues are already done on main. I checked that each commit is on
mainand the code is in the tree:
- #192: 81fbc14 and d48b239 (MUTE_FOR in Software/so101/src/lobby.ts)
- #365: 1f96924 (Software/so101/src/visitor-counts.ts and its test)
- #508: 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441 (facts store, GET /data, /admin/data, Pi health, session traces)
- I couldn't close them. The forge refused all three closes with "your credentials lack the scope for this action", and earlier tries to close them as dropped didn't stick. A person needs to close #192, #365 and #508, or builders will keep being handed work that is already finished.
- The roadmap #86 names is finished. #66 and #439 are closed as done, and #54 and #49 were closed after being split. #561 is the owner's and quill is working on it; nothing blocks it.
- New work isn't allowed here. #86 says "unstick only, no new scope." Also, no pillar umbrella issue ("P0 …") and no "Later gate:" issue is open, so the plan route would turn down any item with
no_pillar.
To refill the reserve, the owner can open a pillar umbrella, for example the next round of the precision work from the 2026-10-21 note, or open issues directly.
Ready now: #561 (quill is on it). #192, #365 and #508 also show as open, but they only need a person to close them.
I changed no files, so there was nothing to commit or push.
🤖 Generated with Claude Code
Planner, 2026-10-25, second pass: I opened no issues again, so 0 are startable, not 12. Nothing changed since my last comment except that #561 is now closed.
- What is still open: #192, #365 and #508, and each one is already done on main:
- #192: 81fbc14 and d48b239 - #365: 1f96924 - #508: 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441
The forge refuses my close (forbidden: credentials lack the scope). A person needs to close them; builders who are handed them have nothing to build.
- Nothing is left to unstick. This direction forbids new scope, and no pillar umbrella ("P0 …") or "Later gate:" issue is open, so the plan route would refuse any item with
no_pillar.
The reserve refills only when the owner opens a pillar or new issues.
I opened no issues on this pass either, so 0 can start now instead of the 12 the reserve asks for. I posted a second comment on #86 saying why.
What's still open: #192, #365 and #508. All three are already done on main:
- #192: 81fbc14 and d48b239
- #365: 1f96924
- #508: 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441
The forge won't let me close them ("your credentials lack the scope for this action"), so a person needs to close #192, #365 and #508. Until then, builders handed them have nothing to build.
Why I didn't plan anything new: #86 says "unstick only, no new scope," and there's nothing left to unstick. #561 is closed now, and the roadmap #86 names is finished too: #66 and #439 closed as done, #54 and #49 closed after being split. No pillar umbrella issue ("P0 …") or "Later gate:" issue is open, so the plan route would turn down any item with no_pillar.
The reserve only refills if the owner opens a pillar or new issues. The precision work in the 2026-10-21 note would be an obvious next pillar.
Ready now: nothing (#86 itself stays open). I changed no files, so there was nothing to commit or push.
🤖 Generated with Claude Code
Unstick pass, 2026-10-25. I opened no issues. 0 are startable, not the 12 the reserve asks for. The direction rules out new scope, and nothing is stuck that a split would fix.
- Roadmap: every issue the direction names is closed: #66 and #67 as done, #54, #49/#50 and #70 as split, and all their pieces have landed.
- Owner's new asks: #563 (Open / Closed) and #565 (story page) are assigned to vesper, and #564 (setup TUI) to smith. All three are being worked. None is parked, stalled or at its run cap, so splitting them now would only get in the way of the builders.
- Parked, but already done on main: I checked each commit named below, and each one is on main.
- #192: 81fbc14, d48b239. - #365: 1f96924. - #508: 5f2aecf, cc68622, 50021dd, 9ba11cb, f532441. The forge refused my close as done on #192 and #365 again ("credentials lack the scope"). An earlier drop of both did not take either. #508 is the owner's, so it is not mine to close. A person needs to close all three.
- Open pulls: #491, #502 and #504 are steward bug-hunt pulls waiting for a person to review them; there is no issue to plan behind them.
The next reserve can come from #564: it is a whole product (detect the arms, tell them apart, reuse calibration, local teleop, a Node test), not one pull. If smith parks it, I will split it along those steps.
I opened no issues, so the reserve is 0 startable, not 12. The direction allows no new scope, and nothing on the map is stuck in a way a split would fix. I explained this in a comment on #86, and nothing was pushed.
- Roadmap is finished: every issue the direction names is closed. #66 and #67 are done; #54, #49/#50 and #70 were split, and all their pieces have landed.
- Owner's new asks are in progress: #563 (Open / Closed) and #565 (story page) are assigned to vesper, and #564 (setup TUI) to smith. None is parked, stalled or at its run cap, so I left them alone rather than split work under the builders.
- Three parked issues are already done on main. I checked that every commit named below is on main.
- #192: 81fbc14 and d48b239. - #365: 1f96924. - #508: 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441.
- A person needs to close those three. The forge refused my close as done on #192 and #365 again ("credentials lack the scope"), and an earlier drop of both didn't take either. #508 is the owner's, so it isn't mine to close.
- Three open pulls are waiting for a person to review them: #491, #502 and #504 are steward bug-hunt pulls with no issues behind them to plan.
The next reserve can come from #564. It is a whole product rather than one pull (finding the arms, telling them apart, reusing calibration, local teleop, a test under Node), so if smith parks it I'll split it along those steps.
Ready now: none apart from #86, the direction issue itself.
Unstick pass, 2026-10-25 (second run). I opened no issues, and 0 are startable, not 12.
- Pull #566 (for #564) went back to the builder for one more round with one concrete change: close the first bus in
whoIsTheLeaderwhen the second open fails, plus a test that fails without it. The first two reviews are already answered on the branch, and its check is green. I did not split #564, because its pull is one fix from done. - #563 and #565 are waiting on their own pulls. #192, #365 and #508 are done on main, with the commits named on each, and still need a person to close them; my token cannot.
- The direction allows no new scope, and every roadmap issue it names is closed. Nothing else is left to plan.
I sent pull #566 back to smith for one more round with one change, and I opened no issues. 0 issues are startable, not 12; I explained why in a comment on #86. The map is the whole result of this run, so nothing was pushed.
- Pull #566 (for #564), one change left:
whoIsTheLeaderinSoftware/so101/src/setup.ts:70opens both serial ports in one expression. If the second open fails, the first port is never closed. The fix is to close the first port when the second open throws (the shapesetup()already uses at lines 192-204). Done means a test where the second open throws, the error comes through, and the first port has been closed; it must fail on the current branch. I wrote this on the pull as the whole of the next round. - Why not split #564: smith's pushes already answer the first two reviews: key presses are no longer lost, and the terminal enters raw mode only after both ports open. The check on head 8d6d3c6 passed, preview tests included. The third review comes through truncated in the API, so I couldn't read all of it. The leak above is the one defect I found left on the branch, and smith had flagged it too.
- Still needs a person: #192 and #365 are done on main (81fbc14 and d48b239; 1f96924), but the forge refused my close as done on both ("credentials lack the scope"). #508 is also done on main and is the owner's to close.
- Waiting: #563 and #565 are waiting on their own pulls.
Ready now: none. The direction allows no new scope and every roadmap issue it names is closed, so the reserve frees up only as #566, #563 and #565 land.
Unstick pass, 2026-10-25 (third run). Nothing has changed: I opened no issues, and 0 are startable.
- #566 is still waiting for one more round. The change is named on the pull, but the pull is still with a person, so no builder has been given it. Handing it back to smith is a person's call. Once that one fix lands, #564 closes.
- #563 and #565 are waiting on their own pulls.
- #192, #365 and #508 are done on main and still need a person to close them.
- The direction allows no new scope, and every roadmap issue it names is closed, so there is nothing to fill the reserve of 12 with.
Pull #566 still needs a person to hand it back to a builder; until then it keeps coming back to me unchanged. I opened no issues, so 0 are startable instead of 12; the comment explaining why is on #86, and nothing was pushed.
- Pull #566 (for #564), state: one more round. Nothing has changed since my comment at 17:47: the head is still 8d6d3c6, its check is green, and smith hasn't pushed. The pull is still handed to a person, so no builder has been given the round. I didn't close or split it, because it is one fix from done.
- The fix for that round:
whoIsTheLeaderinSoftware/so101/src/setup.ts:70must close the first serial port when opening the second one fails, with a test that fails on the current branch. I said all this in a comment on the pull. Handing it back to smith or another builder is a person's call; once that one fix lands, #564 closes. - Still needs a person to close: #192, #365 and #508 are done on main, with the commits named on each, and my token can't close them.
- Waiting: #563 and #565 are waiting on their own pulls.
Ready now: none. The direction allows no new scope and every roadmap issue it names is closed, so there is nothing to fill the reserve with until #566, #563 and #565 land.
Unstick pass, 2026-10-25 (fourth run). I opened no issues, and 0 are startable.
- Landed: #563 (Open / Closed) and #565 (story page) are closed.
- #564 waits on pull #566. Smith is working it again (c67ec15 merges main). The one change left for this round is restated on the pull: close the first bus in
whoIsTheLeaderwhen the second open fails, with a test. - #192, #365 and #508 are done on main and still need a person to close them.
- Nothing else to plan: the direction allows no new scope, and every roadmap issue it names is closed. #564 is the last open ask.
Pull #566 is moving again, so I left it in the "one more round" state and opened no issues. That leaves 0 startable instead of 12; the explanation is in a comment on #86, and nothing was pushed.
- Pull #566 (for #564): smith merged main into the branch (c67ec15), and its check is still running. Their local run of the full suite passed. The one fix this round asks for isn't in yet:
whoIsTheLeaderinSoftware/so101/src/setup.ts:70still doesn't close the first serial port when opening the second one fails. I restated that change on the pull with the test it needs, and closing a pull that is one fix from done would throw the work away. - Landed: #563 (Open / Closed) and #565 (story page) are closed.
- Still needs a person to close: #192, #365 and #508 are done on main, with the commits named on each.
Ready now: none. The direction allows no new scope, every roadmap issue it names is closed, and #564 is the last open ask.
Unstick pass, 2026-10-25 (fifth run). Pull #566 is closed and #564 is split:
- #570: the CLI runs under Node. Ready.
- #571:
so101 teleop. Ready. - #572:
so101 setup, which carries thewhoIsTheLeaderport-leak fix. It waits on #570 and #571.
Each starts from the pull's commits at refs/pull/566/head. The pull got three change requests without an approval in between, then two more runs that only merged main.
Startable: 2 (#570, #571), not 12. The direction allows no new scope, every roadmap issue it names is closed, and #564 was the last open ask.
- #569 (the owner's R&D proposal: object commands and a chat agent) says nothing is built until the owner picks the options, so I planned nothing from it.
- #192, #365 and #508 are done on main and still need a person to close them.
I closed pull #566 and split #564, the owner's setup ask, into three single-pull issues. Two of them can start now, short of the 12 the reserve asks for; the reason is in a comment on #86. Nothing was pushed; this run only changes the map.
Asking for one more round on #566 didn't work. After I restated the change, smith's next two pushes only merged main, and whoIsTheLeader still left the first port open whenever the second open failed. Each new issue starts from smith's commits at refs/pull/566/head, so the work isn't lost. The owner's acceptance criteria carry over unchanged, except share-on-web, which the pull had already dropped.
Opened, in order:
- #570: the
so101CLI runs under Node, and--helpandportsno longer reachbun:sqlite. A test runs it under Node, and another fails if anybun:import is reached. Ready now. - #571:
so101 teleopdrives the follower from the leader at 60 Hz, with a joint table, lag, space to STOP and a ramped resume. It includes the README's "Plug in and play" section. Ready now. - #572:
so101 setupfinds both arms, tells them apart, reuses existing calibration and ends in teleop. It carries the port-leak fix with a test that fails without it. It waits on #570 and #571.
Closed: pull #566, and #564 as split into #570, #571 and #572. I left a comment on each saying why.
Why only 2 are startable: the direction allows no new scope, every roadmap issue it names is closed, and #564 was the last open ask. #569 is a new proposal from the owner (object commands and a chat agent), but it says nothing gets built until the owner picks the options, so I planned nothing from it. #192, #365 and #508 are done on main and still need a person to close them.
Ready now: #570 and #571. The forge also lists #86 itself, #564 (closed during this run) and #569 (the owner's proposal) as ready; none of those is builder work.
Unstick pass, 2026-10-25 (sixth run). I opened no issues.
- #569 (the owner's object-commands proposal), parked twice, is waiting on the owner.
- Defer was refused (no_later_gate): the repository has no open "Later gate: …" issue.
- Split or replace is pointless: every piece needs the owner's go, so a builder would decline it again.
- Unstick: the owner answers its three decisions, or a person opens a Later gate.
- #564's pieces: smith is on #570 and #571, and #572 waits on both.
- Startable: 0, not 12. The direction allows no new scope, and every roadmap issue it names is closed.
- Still to close: #192, #365 and #508 are done on main and need a person to close them.
#569 is still open and parked, because none of the allowed states works for it. It needs the owner to answer it, or a person to open a Later gate. I opened no issues, so 0 are startable instead of 12; the explanation is in a comment on #86, and nothing was pushed.
Why each state is ruled out for #569:
- Defer: the forge refused it (
no_later_gate). This repository has no open "Later gate: …" issue, and only the owner or a writer can open one. - Split or replace: every piece needs the owner's go first. Any issue I opened would be handed to a builder, who would decline it a third time for the same reason.
- Drop: it's the owner's ask, so it isn't mine to drop.
What unsticks it, either one:
- The owner answers the three decisions in the proposal:
- go or no-go on step (a), the click-to-hover mapping, which needs no model; - which model; - whether visitors may use object commands.
Then I split the chosen steps into single-pull issues.
- Or a person opens a "Later gate: …" issue, and I defer #569 behind it so it leaves the builders' board.
I put both options in a comment on #569.
Why the reserve is empty: the direction allows no new scope, and every roadmap issue it names is closed. Smith is on #570 and #571, and #572 waits on both. #192, #365 and #508 are done on main and still need a person to close them.
Ready now: none.
Unstick pass, 2026-10-25 (seventh run). I opened no issues, and 0 are startable.
- #570 landed. #571 is with smith, and #572 waits on it.
- #569 is still held by a person, not the crew. The owner has to answer its three decisions, or someone opens a "Later gate: …" issue so I can defer it. Defer is refused without one (
no_later_gate). - The direction allows no new scope, and every roadmap issue it names is closed.
- #192, #365 and #508 are done on main and still need a person to close them.
#569 is unchanged and will keep coming back on every run until a person acts. I opened no issues and pushed nothing; 0 are startable instead of 12, and I said why in a comment on #86.
Why #569 is stuck: the owner hasn't answered its three decisions, and the repository still has no "Later gate: …" issue. Without a gate the forge refuses a deferral (no_later_gate). Splitting or replacing it would only hand builders work they would decline a third time, and it's the owner's ask, so I can't drop it. I said this again, briefly, in a comment on #569.
What unsticks it, either one:
- The owner answers the three decisions:
- go or no-go on step (a), the click-to-hover mapping; - which model; - whether visitors may use object commands.
Then I split the chosen steps into single-pull issues.
- Or a person opens a "Later gate: …" issue, and I defer #569 behind it.
Elsewhere on the map: #570 has landed, #571 is with smith, and #572 waits on #571. #192, #365 and #508 are done on main and still need a person to close them.
Ready now: none. The direction allows no new scope, and every roadmap issue it names is closed.
Unstick pass (eighth run): I opened no issues, and 0 are startable. #571 landed and smith is on #572. #569 still needs the owner's decisions or a Later gate. #192, #365 and #508 still need a person to close them.
#569 is unchanged and will keep coming back each run until a person acts. I opened no issues and pushed nothing; 0 are startable instead of 12, and I said why in a short comment on #86.
- #569 is waiting on the owner. There is still no owner answer and no "Later gate: …" issue to defer it behind. Splitting it would hand builders work they would decline a third time, and I can't drop it because it's the owner's ask. I posted a one-line state comment on it.
- What unsticks it: the owner answers its three decisions (go on step (a), which model, whether visitors may use object commands), or a person opens a "Later gate: …" issue.
- Since my last run: #571 has landed, and smith is working #572, the last piece of the setup ask.
- Still needs a person to close: #192, #365 and #508, which are done on main.
Ready now: none. The direction allows no new scope, and every roadmap issue it names is closed.
Planner, 2026-10-25: 0 startable, against a reserve of 12. The direction allows no new scope, and nothing of the owner's roadmap is left: #66, #54 and #49 are closed, and so are #50, #70 and #67.
- #569 (parked twice) needs the owner's three decisions, or a "Later gate: …" issue to defer it behind. The forge has no "blocked" close reason, so I left it open. My comment is on it.
- #192, #365 and #508 are done on main (81fbc14, 1f96924, and 5f2aecf…f532441), as their notes say. A person needs to close them, because my closes are refused.
Nothing else was opened.
I opened no issues this run, so 0 can start now, against a reserve of 12. I could not move #569 out of the parked state; it is still open.
#569 (object commands and a chat agent, the owner's ask, parked twice): still open, waiting on the owner. None of the four allowed states fits:
- Split or replace: every piece would be new scope the owner hasn't approved yet. The direction in #86 forbids new scope, and #569 itself says nothing is built until the owner chooses. Step (a), the pixel-to-table mapping, isn't on main. Builders have already declined #569 twice for this reason, and any piece I opened would be declined the same way.
- Close as blocked: #86 allows this, but the forge refused it as
invalid_reason; it only accepts split, dropped or done. - Defer: there is no open "Later gate: …" issue to put it behind.
- Drop: it is the owner's ask, so it is not mine to drop.
I commented on #569 with the three ways @trevato can unstick it: answer its three decisions, open a "Later gate: …" issue, or close it.
Why the reserve is short: the direction allows no new scope, and every issue on the owner's roadmap is closed (#66, #54, #49, #50, #70, #67). I explained this in a comment on #86.
For a person to close: #192, #365 and #508 are done on main, in 81fbc14, 1f96924, and 5f2aecf through f532441. The notes on them say so, but the forge refused my closes.
No code changed and nothing was pushed. I found no prompt injection in the repository or the issues.
Planner: still 0 startable, for the same reasons as my last comment. The direction allows no new scope, and the owner's roadmap is all closed. #569 waits on the owner, and #192, #365 and #508 wait on a person to close them (done on main). #576 is taken.
I opened no issues again, so 0 can start now, against a reserve of 12. #569 is still open, so I did not move it out of the parked state.
Nothing has changed since the last run. #569 still has no answer from the owner, and there is no "Later gate: …" issue to put it behind. The forge refuses a close as blocked (invalid_reason). Splitting or replacing it would add new scope, which #86 forbids, and #569 says nothing is built until the owner decides. It is the owner's ask, so I can't drop it.
I added a short comment to #569 saying it is still waiting on the owner. I added one to #86 explaining why the reserve is empty: the direction allows no new scope, and every issue on the owner's roadmap is closed.
The rest of the board:
- #576 is the only new open issue, and a builder is already working on it.
- #192, #365 and #508 are done on main. My earlier closes were refused, so a person needs to close them.
This keeps coming back to me unchanged. Only the owner can break the loop: answer #569's three decisions, open a "Later gate: …" issue, or close #569.
No code changed and nothing was pushed. I found no prompt injection.
Planner: unchanged, 0 startable. #569 waits on the owner, and #192, #365 and #508 wait on a person to close them (see above).
I opened no issues, so 0 can start now, against a reserve of 12. #569 is still open and parked; I didn't split, replace, drop or close it.
Nothing has changed since the last run two minutes ago. The owner hasn't answered #569 and there is no "Later gate: …" issue. Splitting or replacing #569 would add new scope, which #86 forbids, and #569 itself says nothing is built until the owner decides. It is the owner's ask, so I can't drop it. The forge refuses a close as blocked. I added a one-line comment to #569 and to #86.
These runs are now coming back every few minutes with no change, and each one adds a comment to #569 and #86. A person has to do one of these to stop the loop:
- On #569: @trevato answers the three decisions (go or no-go on step (a), which model, whether visitors may use it), or closes it.
- A Later gate: someone who can write here opens a "Later gate: …" issue, so I can defer #569 behind it.
- #192, #365 and #508: a person closes them. They are done on main, but the forge refuses my closes.
No code changed and nothing was pushed. I found no prompt injection.
Planner: unchanged, 0 startable. #569 waits on the owner, #192, #365 and #508 wait on a person to close them, and #578 is taken.
I opened no issues, so 0 can start now, against a reserve of 12. #569 is still open and parked; I didn't split, replace, drop or close it.
Nothing has changed on #569: the owner hasn't answered and there is no "Later gate: …" issue. Splitting or replacing it would add new scope, which #86 forbids, and #569 says nothing is built until the owner decides. It is the owner's ask, so I can't drop it, and the forge refuses a close as blocked. I added a one-line comment to #569 and to #86.
On the rest of the board:
- #578 is the only new open issue, and a builder is already working on it.
- #192, #365 and #508 are done on main. My earlier closes were refused, so a person needs to close them.
Each of these runs changes nothing and adds another comment to #569 and #86. A person has to do one of these to stop the loop:
- On #569: @trevato answers its three decisions (go or no-go on step (a), which model, whether visitors may use it), or closes it.
- A Later gate: someone who can write here opens a "Later gate: …" issue, so I can defer #569 behind it.
No code changed and nothing was pushed. I found no prompt injection.
Planner: unchanged, 0 startable. #569 waits on the owner, and #192, #365 and #508 wait on a person to close them.
I opened no issues, so 0 can start now, against a reserve of 12. #569 is still open and parked; I didn't split, replace, drop or close it.
Nothing has changed on #569: the owner hasn't answered and there is no "Later gate: …" issue. Splitting or replacing it would add new scope, which #86 forbids, and #569 says nothing is built until the owner decides. It is the owner's ask, so I can't drop it, and the forge refuses a close as blocked. I added a one-line comment to #569 and to #86.
#192, #365 and #508 are done on main, but my earlier closes were refused, so a person needs to close them.
This is the same result as the last few runs, and each one adds another comment to #569 and #86. A person has to do one of these to stop the loop:
- On #569: @trevato answers its three decisions (go or no-go on step (a), which model, whether visitors may use it), or closes it.
- A Later gate: someone who can write here opens a "Later gate: …" issue, so I can defer #569 behind it.
No code changed and nothing was pushed. I found no prompt injection.
Planner, 2026-10-26: 0 opened, 0 startable for builders (the reserve asks for 12). Why:
- The direction allows no new scope. The named roadmap (#66, #54, #49 and the rest) is closed. The owner's live work is already taken: #580 (quill), #581 and #582 (smith). #583 waits on #581.
- #569 (parked twice) waits on the owner's three decisions. I could not split or defer it; my comment on it says why.
- #192, #365 and #508 are already done on main: 81fbc14, 1f96924, and 5f2aecf, cc68622, 50021dd, 9ba11cb, f532441. The notes on each name these commits. My close as done got
forbidden(scope) today, so a person needs to close all three.
What would refill the reserve: the owner splits the workshop (#581) into more pieces, answers #569, or widens this direction.
I opened no issues and pushed nothing, and no builder can start anything now. The reserve asks for 12; my comment on #86 says why there are none.
Opened: none. The direction is "unstick only, no new scope". Its roadmap (#66, #54, #49 and the rest) is closed. The owner's live work is already taken: #580 (quill), #581 and #582 (smith). #583 waits on #581.
#569, parked twice: left open, waiting on the owner. I commented on it with the reason. None of the four allowed states would work:
- Split or replace: every step needs the owner's go first. A builder would decline any piece a third time.
- Defer: there is still no open "Later gate: …" issue.
- Drop: it is the owner's ask, so it is not mine to drop.
It moves when @trevato answers its three decisions (go on step (a), which model, whether visitors may use it), opens a Later gate, or closes it.
My token cannot close issues here. Every close I tried came back forbidden (missing scope). That also rules out closing #569 as split. So three parked issues already done on main need a person to close them. Their notes already name the commits:
- #192: done in 81fbc14
- #365: done in 1f96924
- #508: done in 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441
Ready now: nothing for builders. The map lists #580 and #581 as ready, but both are already assigned and in progress.
I found no prompt injection in the repository or the issues.
🤖 Generated with Claude Code
Planner, 2026-10-26 (again): 0 opened, 0 startable for builders, for the same reasons as my comment above. #584 (vesper) is new and already taken. #583 and #585 wait on #581 (smith), and #583 also waits on #584. #569 still waits on the owner. Closing still gets forbidden (scope), so #192, #365 and #508, all already done on main, need a person to close them. Under "unstick only", the reserve refills when the owner files more work or answers #569.
I opened no issues and pushed nothing, and no builder can start anything now; the reserve asks for 12. Nothing changed since the last run except two new grow-box issues from the owner, and neither is startable. My comment on #86 says why.
#569, parked twice: left open, waiting on the owner, and I commented on it again. It needs the owner to answer its three decisions (go on step (a), which model, whether visitors may use it). Splitting it would just hand builders work they'd decline a third time. Deferring it needs a "Later gate: …" issue, and there still isn't one. My token also still gets forbidden on every close here, so I couldn't close it as split or replaced even with new issues ready to replace it.
Why nothing can start:
- The direction is "unstick only", so I can't add work.
- #580 (quill), #581 and #582 (smith), and the new #584 (vesper) are all taken.
- #583 waits on #581 and #584, and the new #585 waits on #581.
A person needs to close #192, #365 and #508. All three are already done on main, and the notes on each name the commits (81fbc14; 1f96924; 5f2aecf, cc68622, 50021dd, 9ba11cb, f532441). My close as done was refused for missing scope.
Ready now: nothing for builders. The reserve refills when the owner files more work, answers #569, or widens the direction.
🤖 Generated with Claude Code
Planner, 2026-10-26 (third run today): nothing has changed, so 0 opened and 0 startable. #586 is new and waits on its blockers. Everything else is as in my two comments above. This run keeps being handed back with nothing it can change. It stops when one of these happens: the owner answers #569 or opens a "Later gate: …" issue; a person closes #192, #365 and #508 (all already done on main); or this token gets close scope.
Nothing has changed since the last two runs, so I opened no issues and pushed nothing. No builder can start anything; the reserve asks for 12, and my comment on #86 says why.
#569, parked twice: left open, waiting on the owner. I didn't add a third identical comment to it today. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token still can't close issues (forbidden, missing scope), so I can't split or replace it either.
Why nothing can start:
- The direction allows no new work.
- #580, #581, #582 and #584 are all already taken.
- #583, #585 and the new #586 all wait on blockers.
A person needs to close #192, #365 and #508. All three are already done on main, with notes naming the commits, but my close as done is refused.
This run will keep coming back with nothing to change until the owner answers #569, opens a Later gate or files more work, a person closes those three, or my token gets close scope.
Ready now: nothing for builders.
🤖 Generated with Claude Code
Planner, 2026-10-26 (fourth run): unchanged, so 0 opened and 0 startable. #589 and #590 are new and wait on their blockers. #580 and #584 are now waiting on review, not stuck. What would refill the reserve is the same as in my comments above.
Nothing has changed that I can act on, so I opened no issues and pushed nothing. No builder can start anything; the reserve asks for 12, and my comment on #86 says why.
#569, parked twice: left open, waiting on the owner, as my two comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token still can't close issues (forbidden, missing scope), so I can't split or replace it either.
What's on the board:
- Waiting on review: #580 and #584.
- In progress: #581 and #582.
- Blocked: #583, #585, #586, and the new #589 and #590 all wait on their blockers.
A person needs to close #192, #365 and #508. All three are already done on main, with notes naming the commits, but my close as done is still refused.
Ready now: nothing for builders.
🤖 Generated with Claude Code
Planner, 2026-10-26 (fifth run): 0 opened, 1 startable (#593). #580, #581, #582 and #584 are waiting on review. #583, #585, #586, #589 and #590 wait on those. #569 still waits on the owner (decisions or a Later gate). My token still gets forbidden on closes, so #192, #365 and #508, all already done on main, need a person. The direction allows no new scope, so I have nothing else to add.
I opened no issues and pushed nothing. One issue is startable: #593 (identity line on /story and /admin/data), opened since the last run. The reserve asks for 12, and my comment on #86 says why there's only one.
#569, parked twice: left open, waiting on the owner, as my two comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token still can't close issues (forbidden, missing scope), so I can't split or replace it.
What's on the board:
- Waiting on review: #580, #581, #582 and #584.
- Blocked behind those: #583, #585, #586, #589 and #590.
- Stuck but done: #192, #365 and #508 are already done on main, with notes naming the commits. A person needs to close them, because my close as done is still refused.
Ready now: #593.
🤖 Generated with Claude Code
Planner, 2026-10-26 (sixth run): 0 opened, 1 startable (#593). #580 has landed. Everything else is as in my comment above: the grow issues wait on #581, #582 and #584 (in review), #569 waits on the owner, and #192, #365 and #508 need a person to close them.
I opened no issues and pushed nothing. One issue is startable, #593; the reserve asks for 12, and my comment on #86 says why.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token still can't close issues (forbidden, missing scope), so I can't split or replace it.
What's on the board:
- Landed since the last run: #580.
- Waiting on review: #581, #582 and #584.
- Blocked behind those: #583, #585, #586, #589 and #590.
- Stuck but done: #192, #365 and #508 are already done on main, with notes naming the commits. A person needs to close them, because my close as done is still refused.
Ready now: #593.
🤖 Generated with Claude Code
Planner, 2026-10-26 (seventh run): 0 opened, 0 startable. #584 and #593 have landed. All five open grow issues wait, correctly, on #581 or #582, both in review: #583, #585 and #590 on #581; #589 on #583; #586 on #582 and #585. When #581 lands, #583, #585 and #590 become ready on their own. #569 still waits on the owner. #192, #365 and #508 still need a person to close them.
I opened no issues and pushed nothing, and no builder can start anything now; the reserve asks for 12. My comment on #86 says why.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token still can't close issues (forbidden, missing scope), so I can't split or replace it.
What's on the board:
- Landed since the last run: #584 and #593.
- Waiting on review: #581 and #582.
- Blocked behind those, and the dependencies are correct: #583, #585 and #590 wait on #581, #589 waits on #583, and #586 waits on #582 and #585. When #581 lands, #583, #585 and #590 become ready on their own.
- Stuck but done: #192, #365 and #508 are already done on main, with notes naming the commits. A person needs to close them, because my close as done is still refused.
Ready now: nothing for builders.
🤖 Generated with Claude Code
Planner, 2026-10-26 (eighth run): 0 opened, 1 startable (#595). The rest is unchanged from my comment above: the grow issues wait on #581 and #582 (in review), #569 waits on the owner, and #192, #365 and #508 need a person to close them.
I opened no issues and pushed nothing. One issue is startable: #595 (pump schedule), opened since the last run. The reserve asks for 12, and my comment on #86 says why there's only one.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token still can't close issues (forbidden, missing scope), so I can't split or replace it.
What's on the board:
- Waiting on review: #581 and #582.
- Blocked behind those: #583, #585, #586, #589 and #590, with correct dependencies.
- Stuck but done: #192, #365 and #508 are already done on main, with notes naming the commits. A person needs to close them, because my close as done is still refused.
Ready now: #595.
🤖 Generated with Claude Code
Planner, 2026-10-26 (ninth run): 0 opened, 3 startable, plus pull #588. Pull #588 (the grow light, #582) gets one more round, scoped in my comment there: re-merge main to clear the 3 conflicts, and make the body-cap test strict. #569 still waits on the owner. #192, #365 and #508 still need a person to close them. The direction allows no new scope, so I have nothing else to plan.
I opened no issues and pushed nothing. Three issues are startable; the reserve asks for 12, and my comment on #86 says why.
Pull #588 (grow light, #582): I gave it one more round with two concrete changes.
- Merge main again. The pull doesn't merge now:
README.md,terminal.tsandtty.tsconflict. - Make the body-cap test strict. A 1.5 MB chunked post must get a 413, and a cut connection must fail the test. The builder had already called this test weak.
The full review text is cut off in every API view I could reach. So these two changes come from the pull's current state and the builder's own notes, not from the reviewer's exact last ask. The comment also says what happens if this round fails too: close the pull and land the light as two issues, first the Pi-side schedule and drivers, then the card and terminal door. I couldn't check the 360px owner layout: this pull's preview isn't one my shell can reach.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token can't close issues (forbidden, missing scope), so I can't split or replace it.
A person needs to close #192, #365 and #508. All three are already done on main, with notes naming the commits, but my close as done is refused.
Ready now: 3 issues, per the forge's count, plus the next round on pull #588.
🤖 Generated with Claude Code
Planner, 2026-10-26 (tenth run): 0 opened, 1 startable (#583).
- #582 is done on main in 82337a2 (#596), and the note is on it. A person needs to close it, which also frees #586 from it.
- Pull #588 is narrowed to the one stricter body-cap test, because the rest of it is already on main.
- #585 and #590 are with smith. #589 waits on #583, and #586 waits on #582 and #585.
- #569 still waits on the owner. #192, #365 and #508 still need a person to close them.
Nothing else fits "unstick only".
I opened no issues and pushed nothing. One issue is startable, #583; the reserve asks for 12, and my comment on #86 says why.
Pull #588 (grow light): I gave it a last round, narrowed to one change. Its light work is already on main in 82337a2 (#596, the pump pull). That commit landed the schedule, the shelly, gpio and uhubctl drivers, the card, the /grow terminal door and the README section, which is why #588 now conflicts with main in 15 files.
The one change: merge main taking main's side, so the pull's diff shrinks to the body-cap test. In light-endpoint.test.ts:97, the test passes on a cut connection and must instead require a 413. If the diff is empty apart from that test and it still can't pass, the pull should close.
#582: done on main in 82337a2. I put an "already done on main" note on it, but my token is refused the close, so a person needs to close it. Closing it also frees #586 from it.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token can't close issues (forbidden, missing scope), so I can't split or replace it.
A person needs to close #192, #365 and #508. All three are already done on main, with notes naming the commits.
Ready now: #583. #585 and #590 are with smith. #589 waits on #583, and #586 waits on #582 and #585.
🤖 Generated with Claude Code
Planner, 2026-10-26 (eleventh run): 0 opened, 2 startable (#582, #583). But #582 is done on main in 82337a2 (#596): pull #588 closed as done, and the note is on #582. A person needs to close #582, which frees #586 once #585 lands, so really only #583 is buildable. #590 has landed. #589 waits on #583. The stricter body-cap test (light-endpoint.test.ts:97 passes on a cut connection) was not carried over; it can be filed if the owner wants it. #569 still waits on the owner. #192, #365 and #508 still need a person to close them.
I opened no issues and pushed nothing. The forge counts two issues as startable, but only #583 is real work: #582 is already done on main. The reserve asks for 12, and my comment on #86 says why.
Pull #588 and #582: the pull closed as done. Smith declined it as already on main in 82337a2 (#596). The stricter body-cap test I asked for in the last round was not built: light-endpoint.test.ts:97 still passes when the connection is cut. I noted that on #86 so the owner can decide whether to file it. #582 stays open only because nobody with close rights has closed it; its "already done on main" note names 82337a2. Closing it takes #586 down to waiting on #585 alone.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token can't close issues (forbidden, missing scope), so I can't split or replace it.
A person needs to close #192, #365, #508 and #582. All four are already done on main, with notes naming the commits, but my close as done is refused.
Ready now: #583. #590 has landed. #589 waits on #583, and #586 waits on #582 and #585 (with smith).
🤖 Generated with Claude Code
Planner, 2026-10-26 (twelfth run): 0 opened, 1 buildable (#600, the body-cap 413 follow-up). #582 counts as ready, but it is done on main in 82337a2 and needs a person to close it. #583 and #585 are with smith. #589 waits on #583, and #586 waits on #582 and #585. #569 still waits on the owner. #192, #365 and #508 still need a person to close them. Nothing else fits "unstick only".
I opened no issues and pushed nothing. One issue is buildable: #600, which picks up the body-cap 413 follow-up dropped from pull #588. The reserve asks for 12, and my comment on #86 says why.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token can't close issues (forbidden, missing scope), so I can't split or replace it.
What's on the board:
- With smith: #583 and #585.
- Blocked: #589 waits on #583, and #586 waits on #582 and #585.
- #582 shows as ready, but it's already done on main in 82337a2.
A person needs to close #192, #365, #508 and #582. All four are already done on main, with notes naming the commits, but my close as done is refused.
Ready now: #600.
🤖 Generated with Claude Code
Planner, 2026-10-26 (thirteenth run): 0 opened, 1 buildable (#589). #583 has landed, and #600 is in review. #582 still counts as ready, but it is done on main in 82337a2 and needs a person to close it. #586 waits on #582 and #585 (smith). #569 still waits on the owner. #192, #365 and #508 still need a person to close them.
I opened no issues and pushed nothing. One issue is buildable, #589, which became ready when #583 landed. The reserve asks for 12, and my comment on #86 says why.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token can't close issues (forbidden, missing scope), so I can't split or replace it.
What's on the board:
- Landed since the last run: #583.
- In review: #600.
- With smith: #585.
- Blocked: #586 waits on #582 and #585.
- #582 still shows as ready, but it's already done on main in 82337a2.
A person needs to close #192, #365, #508 and #582. All four are already done on main, with notes naming the commits, but my close as done is refused.
Ready now: #589.
🤖 Generated with Claude Code
Planner, 2026-10-26 (fourteenth run): 0 opened, 0 startable.
- #582 (at its run cap) is not split, because it is done on main in 82337a2. It needs a person to close it. I removed #586's dependency on it, so #586 now waits only on #585 (smith).
- #589 is with vesper, and #600 is in review.
- #569 still waits on the owner. #192, #365 and #508 still need a person to close them.
Nothing else fits "unstick only".
I opened no issues and pushed nothing, and no builder can start anything now; the reserve asks for 12. My comment on #86 says why.
#582 (at its run cap): not split, because there's nothing left to build. Every run finds the work already on main in 82337a2 (#596), and the stricter body-cap test is now #600. Splitting it would only hand builders finished work again. My close as done is still refused (forbidden, missing scope), so a person needs to close it. I removed #586's dependency on it, so #582 no longer holds anything up. I explained this on #582 and on #586.
#569, parked twice: left open, waiting on the owner, as my earlier comments on it today say. It moves when the owner answers its three decisions or a person opens a "Later gate: …" issue. My token can't close issues, so I can't split or replace it.
What's on the board:
- With smith: #585. #586 now waits on it alone.
- With vesper: #589.
- In review: #600.
A person needs to close #192, #365, #508 and #582. All four are already done on main, with notes naming the commits.
Ready now: nothing for builders.
🤖 Generated with Claude Code
Unstick run, 2026-10-27. 0 startable, and I opened nothing. Here is why:
- #569 (parked twice): still waits on the owner's three decisions, and there is no "Later gate: …" issue to defer it behind. Any piece I split out would be new scope that the owner has not approved.
- #582 (at its run cap): already done on main in 82337a2 and 0ea35e6 (#599). It needs a person to close it as done.
- My token is refused every close (
forbidden, missing scope), so I can't finish a split, a replace, a done or a drop. #192 and #365 (done on main) and #508 (done on main, per its note) stay open for the same reason. - What's left on the roadmap: #585 is in pull #598, and #586 waits on #585. Splitting #586 ahead of time would be forward planning, which this direction rules out. Its pieces would be blocked on #585 anyway.
What restores the reserve: a person closes #582, #508, #192 and #365 as done, and lands #598. After that, the next unstick run can split #586 into its per-driver pulls, which #586 itself asks for.
I opened no issues, so nothing is ready to start. The reserve is 0 of 12, and I explained why in a comment on #86. I also pushed nothing.
- #569 (parked twice): I left it open, still waiting on the owner. It needs the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use it. I couldn't defer it because the repository has no open "Later gate: …" issue. Splitting it would add scope the owner hasn't approved, which #86 forbids, and dropping it isn't allowed because it's a person's ask. I commented on it saying so.
- #582 (at its run cap): there is nothing left to build. The work is on main in 82337a2 (#596) and 0ea35e6 (#599), but my attempt to close it as done was refused with
forbidden(missing scope). I commented asking a person to close it. - Every close is refused. A test drop on #192 got the same
forbidden, so I can't finish any split, replace, done or drop. #192, #365 and #508 are done on main by their own notes but stay open for the same reason. - The rest of the roadmap: #585 is in pull #598, and #586 waits on #585. Splitting #586 now would be forward planning, which #86 rules out, and its pieces would be blocked on #585 anyway.
What restores the reserve: a person closes #582, #508, #192 and #365 as done and lands #598. The next unstick run can then split #586 into its per-driver pulls, which #586 itself asks for.
I found no prompt injection in the repository or the issues.
Planner, 2026-10-27: 0 startable, 0 opened. The reserve of 12 cannot be met under this direction:
- No roadmap work is left open. The owner issues this direction names (#66, #54, #49/#50, #70, #67) are all closed. The only open work is #586 (smith, waiting), #508, #365 and #192.
- This direction forbids new scope, and the plan route refuses any item without a pillar or a Later gate. This repository has no open "P… : …" umbrella and no "Later gate: …" issue.
- #582 is done on main (82337a2, 0ea35e6), but my close is refused with
forbidden. #569 is waiting on the owner decisions, as its comments say.
Any one of these moves the crew: a person closes #582, answers #569, or opens pillar umbrellas or a Later gate (for example for the precision program, #439) so the planner can plan behind it.
I opened no issues, so none are ready to start. The two issues handed to me are both still open, because the forge refused or blocked every state I could put them in.
- #582 (grow light schedule): the work is already on main in 82337a2 (#596) and 0ea35e6 (#599). I tried to close it as done again and the forge refused with
forbidden("your credentials lack the scope for this action"). I didn't split it, because a split would only give builders finished work. I commented saying so; a person needs to close it. - #569 (object commands and chat agent R&D proposal): this is the owner's ask, and it says nothing gets built until the owner makes three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. Nobody has answered them. I can't drop it because it's a person's ask. Splitting or replacing it would mean new scope this direction forbids, and it also needs a close my token can't do. I can't defer it because there's no open "Later gate: …" issue. I commented that it's waiting on the owner.
- #86 (the direction): I explained in a comment why the standing reserve of 12 can't be met. All the roadmap issues this direction names (#66, #54, #49/#50, #70, #67) are closed. The direction forbids new scope. The plan route refuses any item without a pillar or a Later gate, and this repository has neither a "P…" umbrella nor a "Later gate: …" issue.
Any one of these gets the crew moving again: a person closes #582, the owner answers #569, or a writer opens pillar umbrellas or a Later gate (for example for the precision program, #439) so I can plan behind it.
I pushed no code and found no prompt injection in the issues or the repository.
🤖 Generated with Claude Code
Planner, 2026-10-27 (run 3): 0 opened, 0 startable. Nothing has changed since my last comment. The roadmap issues this direction names are closed, and it forbids new scope. There is no pillar umbrella or Later gate, so the plan route has nothing to plan behind. #582 is done on main, but my close is refused with forbidden. #569 is waiting on the owner. Pull #604 gets one more round (see my comment there), and #605–#607 follow it under #586. To move the crew, a person closes #582, answers #569, or opens a pillar umbrella or Later gate.
I opened no issues, so none are ready to start. #582 and #569 are still open, because the forge refused or blocked every state I could put them in. I gave pull #604 one more round instead of splitting it.
- Pull #604 (dosing controller, for #586): the latest commits already answer juniper's three review points. The page, terminal and MCP routes are reachable,
POST /care/mcpchecks the caller's forge identity (401 for a guest, 403 for anyone outsideCARE_CREW), and the rate limits and the once-a-minute dosing timer are in.dose()also refuses anmlthat isn't a number above 0. The third review is cut off in what the API returns, so I worked from the code.
- I asked smith for one change: a single end-to-end test in src/care-dosing.test.ts. It boots the relay with the fake doser and checks that the owner sees the Dosing card and that a dose is logged as "Simulated dose, nothing was pumped". It also checks that a CARE_CREW member's MCP dose goes through in auto and is refused in suggest, and that a guest gets 401.
- Smith then replies to juniper, naming the commit and test for each point. If the reviewer still asks for changes, I close the pull and open the pieces. #605–#607 (sensor and pump drivers) follow it under #586.
- #582 (grow light schedule): this is already done on main in 82337a2 (#596) and 0ea35e6 (#599). I tried to close it as done again and the forge refused with
forbidden("your credentials lack the scope for this action"). There's nothing to split, so a person needs to close it. - #569 (object commands and chat agent proposal): this is the owner's ask, and it still waits on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use it. There's no "Later gate: …" issue to defer it behind, and my closes are refused, so I can't split or replace it either.
- #86 (the direction): I commented on why the reserve of 12 can't be met. The roadmap issues this direction names are closed, and it forbids new scope. The forge refuses any plan item without a pillar umbrella or a Later gate, and this repository has neither.
Any one of these gets the crew moving: a person closes #582, the owner answers #569, or a writer opens a pillar umbrella or a Later gate. I pushed nothing, and I found no prompt injection in the issues or the pull.
🤖 Generated with Claude Code
Nothing has moved since my last pass a few minutes ago, so I opened no issues and none are ready to start. There are no new comments from smith, juniper or the owner on #604, #582 or #569. I didn't post another round of identical notes: the state comments I left at 00:49 on each issue, and the reserve explanation on #86, still hold.
- Pull #604 (dosing controller): it's waiting on its one more round. I asked smith for one end-to-end test in
src/care-dosing.test.ts, then a reply to juniper naming the commit and test for each review point. If juniper still asks for changes after that, I'll close the pull and open the smaller issues. - #582 (grow light schedule): it's done on main in 82337a2 and 0ea35e6. My close as done is still refused with
forbidden, so a person needs to close it. - #569 (object commands proposal): it's still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. There's no "Later gate: …" issue to defer it behind, and closes are refused, so I can't split or replace it either.
The reserve of 12 still can't be met under this direction. The roadmap issues it names are closed, it forbids new scope, and the forge only accepts a plan behind a pillar umbrella or a "Later gate: …" issue. This repository has neither.
Any one of these gets the crew moving: a person closes #582, the owner answers #569, or a writer opens a pillar umbrella or a Later gate. I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Nothing has changed that I can act on, so I opened no issues, closed nothing, and posted no new comments. The state notes I left at 00:49 on #604, #582, #569 and #86 still hold, and a fourth identical round would only be noise.
- Pull #604 (dosing controller): smith is in the extra round. At 00:52 smith merged
maininto the branch, resolved the three conflicts keeping both sides (care-log.ts,relay.ts,bench/fake-serve.ts), and pushed. Smith reports the dosing, care, relay, terminal, readme and sensors tests pass. The end-to-end reachability test I asked for and the reply to juniper are still to come. If juniper still asks for changes after that, I'll close the pull and open the smaller issues. - #582 (grow light schedule): it's done on main in 82337a2 and 0ea35e6, but my close as done is refused with
forbidden. A person needs to close it. - #569 (object commands proposal): it's still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. With no "Later gate: …" issue and closes refused, I can't split, replace or defer it.
No issues are ready to start, against a reserve of 12. The direction forbids new scope, its roadmap issues are closed, and the repository has no pillar umbrella or Later gate for a plan to sit behind.
Any one of these gets the crew moving: a person closes #582, the owner answers #569, or a writer opens a pillar umbrella or a Later gate. I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Nothing has changed since my last pass, so I opened no issues, closed nothing, and posted no new comments. Repeating the notes from 00:49 would only add noise on the owner's board.
- Pull #604 (dosing controller): this is still in its one extra round. It's open at a79f6e9, mergeable, with no approval and no new request for changes. Smith's last reply is the merge of
mainat 00:52. The end-to-end reachability test I asked for and the reply to juniper haven't come yet. If juniper still asks for changes after that, I'll close the pull and open the smaller issues. - #582 (grow light schedule): it's done on main in 82337a2 and 0ea35e6, but my close as done is refused with
forbidden. A person needs to close it. - #569 (object commands proposal): it's still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. With no "Later gate: …" issue and closes refused, I can't split, replace or defer it.
No issues are ready to start, against a reserve of 12. The direction forbids new scope, the roadmap issues it names are closed, and there's no pillar umbrella or Later gate for a plan to sit behind. My comment on #86 from 00:49 says this.
Any one of these gets the crew moving: a person closes #582, the owner answers #569, or a writer opens a pillar umbrella or a Later gate. I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Nothing I can act on has changed, so I opened no issues, closed nothing, and posted no new comments.
- Pull #604 (dosing controller): this is still in its one extra round. Smith's reply at 01:13 merges
mainagain: five conflicts resolved keeping both sides, now includingmain's probes block and probe calibration. Smith reports 126 tests pass. The two things I asked for haven't come yet: the end-to-end reachability test insrc/care-dosing.test.ts, and a reply to juniper naming the commit and test for each point. My 00:49 comment there still says exactly what's wanted, so I didn't repeat it. If juniper asks for changes again after that round, I'll close the pull and open the smaller issues. - #582 (grow light schedule): it's done on main in 82337a2 and 0ea35e6, but my close as done is refused with
forbidden. A person needs to close it. - #569 (object commands proposal): it's still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. With no "Later gate: …" issue and closes refused, I can't split, replace or defer it.
- Pull #612 (vesper): this is new since my last pass. It closes the gap where
/grow/dosing,/grow/lightand/grow/pumpanswer anyone who can reach the arm server. It's a normal pull in review and needs nothing from me.
No issues are ready to start, against a reserve of 12. The direction forbids new scope, the roadmap issues it names are closed, and there's no pillar umbrella or Later gate for a plan to sit behind. My 00:49 comment on #86 says this.
Any one of these gets the crew moving: a person closes #582, the owner answers #569, or a writer opens a pillar umbrella or a Later gate. I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
I opened no issues, so none are ready to start. The one thing that moved was pull #604, which I gave one more round with a new ask.
Pull #604 (dosing): pull #610 on main took nearly all of it. Smith merged main, took main's version of the 11 conflicting files, and the pull is now four files with two changes:
- a live page refresh: mode changes, resumes and stops send an event on
/care/events; - the relay calling
Doser.tickonce a minute, so a loop set toautodoses by itself with the real pumps.
Juniper's three earlier asks were about the old, larger pull, and main's versions now cover them. The change I asked smith for is tests that prove the unattended tick is safe before it can pump:
- a loop in
autodoses once, logged with causeauto; - a loop in
suggestoroffnever moves a pump; - a halted doser, or one under STOP, never doses;
- two ticks on the same reading give one dose, not two.
Smith also retitles the pull, says in the description that it switches on unattended dosing, and asks juniper for a fresh review. Loops still ship in suggest, so nothing pumps until the owner switches a loop to auto. Smith's own note asks the owner to choose: keep the unattended tick, or drop it and land only the live refresh.
#582 (grow light schedule): this is done on main in 82337a2 and 0ea35e6, but my close as done is refused with forbidden. A person needs to close it.
#569 (object commands proposal): this still waits on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. There's no "Later gate: …" issue and my closes are refused, so I can't split, replace or defer it.
No issues are ready to start, against a reserve of 12. The direction forbids new scope, the roadmap issues it names are closed, and the repository has no pillar umbrella or Later gate for a plan to sit behind. My 00:49 comment on #86 says this.
Any one of these gets the crew moving: a person closes #582, the owner answers #569, or a writer opens a pillar umbrella or a Later gate. I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Planner, 2026-10-27 (run 4): #581 is split into #615 (ready) and #616 (waits on #615).
A correction to my earlier comments: the plan route does accept items with no pillar here, because this repository has no pillars. Only later items need a Later gate. What actually holds the reserve below 12 is this direction. The roadmap issues it names are all closed, and it forbids new scope, so I only open what unsticks stalled work.
Still held:
- #582 is done on main. I checked all five done items against
light-*.tsand its tests. A close as done is stillforbiddenfor my token, though closes as split now work, so a person needs to close it. - #569 waits on the owner's three decisions.
- Pull #604 is in its last round (see my comment there).
If the owner wants a standing reserve here, the direction has to name what to build next.
I split #581 into two issues and closed it as split. One of them is ready to start, against a reserve of 12.
Opened:
- #615 –
so101 serveboots with the arm unplugged. Ready now.
- /status answers arm: "not connected", while /version, the cameras and /grow/* keep serving.
- Every route that needs the servos answers 503, and a test checks each one.
- This fixes the crash the steward found on the Pi: with SO101_PORT set and no arm plugged in, serve exits every 6 s, so the app shows no cameras and the Pi can't update itself.
- #616 – hot-plug. Waits on #615.
- It retries the port every 5 s, picks the arm up when it's plugged in and lets go when it's unplugged, with no restart. - STOP wins on whichever connection is live.
The app side of #581 was already on main: the stations, the stations admin, and the "not connected" card. So both new issues are Pi-side only.
The rest:
- #582 (grow light schedule): all five of its done items are on main. A close as done is still refused with
forbidden, although the close as split on #581 worked. A person needs to close it. - #569 (object commands proposal): this still waits on the owner's three decisions. Every piece needs the owner's go, so I didn't split it, and there's no "Later gate: …" issue to defer it behind.
- Pull #604 (dosing): this is in its last round, waiting on smith to add the safety tests for the unattended dosing tick that I asked for. Nothing new since my comment.
I also posted a correction on #86. The plan route accepts items without a pillar in this repository; only deferred items need a Later gate. So my earlier claim that nothing could be planned was wrong. What keeps the reserve below 12 is the direction itself: the roadmap issues it names are closed and it forbids new scope. If the owner wants a standing reserve, the direction has to name what to build next.
I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Planner, 2026-10-27 (run 5): opened #618 (dosing live refresh) and #619 (the auto tick with its safety tests). Both are ready now, and #586 waits on them.
They carry what is left of pull #604. The forge refuses my close of that pull while #586 is open, so a person or smith closes it. #615 has landed, and #616 (hot-plug) is with smith.
This leaves 2–3 issues ready to start, short of 12. The reason is unchanged: this direction forbids new scope and its roadmap issues are closed. #582 (done on main) and #569 (waiting on the owner) still need a person.
I opened two issues from what is left of pull #604, but I couldn't close the pull itself. The forge refuses with "a planner may close only an agent's pull whose issue is closed", and #586 is still open.
Opened, both ready now:
- #618 – the dosing card refreshes itself. A mode change, a resume, a halt or a dose sends one event on
/care/events, so an open/carepage updates without a reload. - #619 – a dosing loop set to
autodoses by itself once a minute. Main has the code for an automatic dosing step, but nothing calls it yet. This issue makes the relay run it, with tests that a loop insuggestoroffnever pumps. A halted doser never pumps either, and two checks on the same reading give one dose, not two.
What else changed:
- #586 now waits on #618 and #619.
- Both issues name smith's branch as the starting point, so the work from #604 isn't lost.
- On #604 I first said I had closed it, then posted a correction: it's still open. I asked smith either to land the two pieces as separate pulls or to narrow #604 to #618 alone. A person can also close it.
- #615 (boot with the arm unplugged) has landed, and smith has #616 (hot-plug).
Ready to start: #618 and #619, plus #616 if smith isn't running it yet. That's short of 12. As I explained on #86, the direction forbids new scope and the roadmap issues it names are closed.
Still needs a person:
- #582 is done on main, but my close as done is refused with
forbidden. - #569 is waiting on the owner's three decisions.
I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Nothing has changed since my last pass, so I opened no issues and posted no new comments. Repeating the same notes would only add noise to the board.
- Pull #604 (dosing): still open. My correction at 01:57 stands: its leftover work is planned as #618 and #619, which #586 waits on. The forge won't let me close the pull while #586 is open, so smith or a person closes it.
- #616, #618 and #619 (hot-plug, the dosing card's live refresh, the auto-dosing timer with its safety tests) are all assigned to smith. That's why the board counts zero as ready to start.
- #582 (grow light schedule): done on main in 82337a2 and 0ea35e6, but my close as done is refused with
forbidden. A person needs to close it. - #569 (object commands proposal): still waits on the owner's three decisions. There's no "Later gate: …" issue to defer it behind.
The reserve stays far below 12 because the direction forbids new scope and the roadmap issues it names are closed. My 01:58 comment on #86 says this. Any one of these gets the crew moving: a person closes #582 and #604, the owner answers #569, or the direction names what to build next.
I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Since my last pass, #618 (the dosing card refreshes itself when dosing changes) has landed and is closed as done. Nothing else has moved, so I opened no issues and posted no comments.
- Pull #604 (dosing): still open. #618 has taken one of its two leftover parts, and #619 (the once-a-minute auto-dosing step with its safety tests) is with smith. The forge won't let me close the pull while #586 is open, so smith or a person closes it.
- #616 (hot-plug the arm) and #619: both assigned to smith, which is why the board shows nothing ready to start.
- #582 (grow light schedule): done on main in 82337a2 and 0ea35e6. My close as done is refused with
forbidden, so a person needs to close it. - #569 (object commands proposal): still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands. There's no "Later gate: …" issue to defer it behind.
The reserve stays far below 12 because the direction forbids new scope and the roadmap issues it names are closed. My 01:58 comment on #86 still says this. Any one of these gets the crew moving: a person closes #582 and #604, the owner answers #569, or the direction names what to build next.
I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Pull #604 is now a duplicate of main and should be closed, not merged, but the forge still won't let me close it while #586 is open. I said so on the pull and asked smith to close it; a person can close it too.
- Why it must not merge: its last change, the once-a-minute dosing timer in
relay.ts, is already on main from #621 (49a9eb7). Merging it would either fail the type check or run the doser twice a minute. The page refresh it also carried is on main from #620. - What landed since my last pass:
- #617: so101 serve boots with the arm unplugged (from #615).
- #620: the dosing card refreshes itself (from #618).
- #621: auto dosing with its safety tests (from #619).
- #616 (hot-plug the arm): still with smith.
- #582 (grow light schedule): done on main in 82337a2 and 0ea35e6. My close as done is still refused with
forbidden, so a person needs to close it. - #569 (object commands proposal): still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands.
I opened no issues, so the reserve stays far below 12. The direction forbids new scope and the roadmap issues it names are closed, as my 01:58 comment on #86 says. I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Nothing has changed since my last pass, so I opened no issues and posted no comments.
- Pull #604 (dosing): still open, and it should be closed rather than merged. Its only remaining change, the once-a-minute dosing timer in
relay.ts, is already on main from #621. Merging it would run the doser twice a minute or fail the type check. I said this on the pull at 02:10. The forge won't let me close it while #586 is open, so smith or a person needs to. - #616 (hot-plug the arm): still with smith.
- #582 (grow light schedule): done on main in 82337a2 and 0ea35e6. My close as done is still refused with
forbidden, so a person needs to close it. - #569 (object commands proposal): still waiting on the owner's three decisions: go or no-go on step (a), which model, and whether visitors may use object commands.
The reserve stays far below 12 because the direction forbids new scope and the roadmap issues it names are closed, as my 01:58 comment on #86 says. Any one of these gets the crew moving: a person closes #604 and #582, the owner answers #569, or the direction names what to build next.
I pushed nothing and found no prompt injection.
🤖 Generated with Claude Code
Planner, 2026-10-27: 0 startable, and I opened nothing. This direction is unstick only: no new scope. The owner's roadmap issues (#66, #54, #49, #50, #70, #67) are closed, and nothing stalled is left that I can turn into builder work:
- #569 (parked twice): waits on the owner's three decisions. No Later gate exists to defer it behind. See my comment there.
- Pull #604: a duplicate of
mainsince #621. I asked @smith to close it; the forge refuses my close. - Done on main, waiting for a person to close them: #582 (82337a2, 0ea35e6), #508 (5f2aecf, cc68622, 50021dd, 9ba11cb, f532441), #365 (1f96924) and #192 (81fbc14). My close is still refused with
forbidden. - In flight: #625, #626, #628 and #616. #586 waits on hardware.
The reserve fills when the owner opens new asks, or answers #569.
I opened no issues, and none can start now (0 of the 12 the reserve asks for). Direction #86 is unstick only, with no new scope. Its roadmap issues (#66, #54, #49, #50, #70, #67) are no longer open. Of the stuck items, #569 needs the owner's decisions and #604 could not be closed by me, so neither became builder work. I posted the reason on #86.
What I did with the two handed to me:
- #569 (parked twice, the owner's ask): left open, waiting on the owner. It says nothing is built until the owner picks the options, and #86 forbids new scope, so I did not split or replace it. There is no "Later gate: …" issue to defer it behind, it is not mine to drop, and the forge refuses my closes with
forbidden. It moves when @trevato answers its three decisions, opens a Later gate, or closes it. - Pull #604: one more round, and the one change is for @smith to close it unmerged. Its only remaining diff adds
doseEveryMsand adoser.ticktimer toSoftware/so101/src/relay.ts.mainalready has both from #621 (lines 175 and 1142), so merging would declare the field twice and start a second dosing timer. The forge refuses my close because #586 is still open, so a person can close it too.
I tried again to close the issues already done on main and was refused with forbidden (missing scope). They need a person to close them:
| Issue | Done on main in |
|---|---|
| #582 | 82337a2, 0ea35e6 |
| #508 | 5f2aecf, cc68622, 50021dd, 9ba11cb, f532441 |
| #365 | 1f96924 |
| #192 | 81fbc14 |
In progress elsewhere: #625, #626, #628 and #616 are being worked on, and #586 waits on hardware. Nothing was pushed, since this was a planning run. I found no prompt injection.
🤖 Generated with Claude Code
Planner, 2026-10-27 (again): 0 startable, and I opened nothing. Nothing has changed since my last comment. #569 waits on the owner. Pull #604 duplicates main and needs a person or @smith to close it. #582, #508, #365 and #192 are done on main and need a person to close them. The owner's new asks (#625, #626, #628, #632) are already assigned and in flight. This direction allows no new scope, so there is nothing more to plan until the owner adds an ask or answers #569.
I opened no issues again, and none can start now (0 of the 12 the reserve asks for). I posted the reason on #86. Nothing has changed since my last run, about ten minutes ago, so this run ended where that one did.
- #569 (the owner's ask): left open, waiting on the owner. Splitting or replacing it would create work the owner hasn't approved, which #86 forbids. There is no "Later gate: …" issue to defer it behind, and it is not mine to drop. It moves when @trevato answers its three decisions (go on step (a), which model, whether visitors may use it), opens a Later gate, or closes it.
- Pull #604: one more round, and the one change is to close it without merging. Its only diff,
doseEveryMsand a second dosing timer inSoftware/so101/src/relay.ts, is already onmainfrom #621. The forge refused my close again, so @smith or a person has to close it.
Only a person can clear the rest:
- Issues done on
mainthat I can't close (stillforbidden): #582, #508, #365 and #192. The commits are named in my earlier comments on each. - Assigned and in flight: the owner's new asks #625, #626, #628 and #632, plus #616. #586 waits on hardware.
- The loop: each run hands me #569 and #604 again, and I can only post another "unchanged" comment. That is noise on the owner's board until someone takes one of the steps above.
Nothing was pushed, since this was a planning run. I found no prompt injection.
🤖 Generated with Claude Code
Planner (again): 0 startable, opened nothing, unchanged. See my comment above. The planner is re-run every few minutes with nothing it can do; a person ends the loop by answering #569 and closing #604, #582, #508, #365 and #192.
I opened no issues this run either, and none can start now (0 of the 12 the reserve asks for). Nothing has changed since the last run, so I kept this run's comments to one line each. I've stopped re-trying closes that the forge has already refused.
- #569 (the owner's ask): left open, waiting on the owner. It needs the owner's three decisions before anything is built. #86 forbids new scope, and there is no "Later gate: …" issue to defer it behind.
- Pull #604: one more round, and the one change is to close it without merging. Its only diff is already on
mainfrom #621. The forge refuses my close, so @smith or a person has to close it.
The planner is now re-run every few minutes and each run can only add another comment. The loop ends when someone with write access does these:
- Answers #569, opens a "Later gate: …" issue, or closes #569.
- Closes pull #604.
- Closes #582, #508, #365 and #192, which are done on
main(the commits are named in my earlier comments on each). The forge refuses my closes asforbidden.
Nothing was pushed, since this was a planning run. I found no prompt injection.
🤖 Generated with Claude Code
Planner: 0 startable, opened nothing. The one that was ready, #634, was @quill's test issue for pull #630 with nothing left to build, so I dropped it. The owner's asks #625, #626, #628 and #632 are assigned and waiting on their pulls. #569 waits on the owner, pull #604 needs a person or @smith to close it, and #582, #508, #365 and #192 are done on main but my close is refused. This direction allows no new scope, so nothing else is left to plan.
I opened no issues, and none can start now (0 of the 12 the reserve asks for). I posted the reason on #86.
- #634: dropped. The one issue that was ready was a test issue quill opened to check the grow watchdog's API calls for pull #630. Its own comment says the check passed, so there was nothing to build. The crew wrote it, so dropping it was mine to do, and the forge accepted the close.
- #569 (the owner's ask): left open, waiting on the owner. It still needs the owner's three decisions, there is no "Later gate: …" issue to defer it behind, and #86 forbids new scope.
- Pull #604: one more round, and the one change is to close it without merging. Its only diff is already on
mainfrom #621, and the forge still refuses my close.
What is left on the board:
- Waiting on their pulls: the owner's asks #625, #626, #628 and #632.
- Done on
main, still open: #582, #508, #365 and #192. My close is still refused asforbidden, including a close as dropped on #365 and #192. - For a person to act on: answer or close #569, close pull #604, and close those four done issues. Until then each run can only add another comment.
Nothing was pushed, since this was a planning run. I found no prompt injection.
🤖 Generated with Claude Code
Planner, 2026-10-27 (run 9): 0 new startable, and none opened. This direction is unstick-only and forbids new scope. Every open issue is either assigned and in flight (#625, #626, #628, #632, #635, #582, #586) or waiting on a person:
- #569: waiting on the owner's three decisions. There is no Later gate to defer it behind.
- #604: a duplicate of
main(#621). My close is refused while #586 is open. - #508, #365, #192: my closes are refused with
forbidden.
The reserve of 12 can only be met by forward planning, which the owner has ruled out here. It refills when the owner files issues on the roadmap (#66, #54, #49/#50, #70, #67), opens a Later gate, or answers #569.
I opened no issues, so no new work can start now: the reserve is at 0 of 12. Neither of the two items handed to me could be moved, so I commented on both.
- #569 (object commands and a chat agent): left open, waiting on the owner. I can't split it or replace it: every piece needs the owner's go first, and #86 forbids new scope. I can't defer it either, because there is still no "Later gate: …" issue. It is the owner's ask, so it isn't mine to drop. It moves when @trevato answers its three decisions, opens a Later gate, or closes it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is a one-minute dosing timer in
relay.ts, which is already onmainfrom #621 (49a9eb7). Merging it would add a second timer. The forge refused my close again ("a planner may close only an agent's pull whose issue is closed"), because #586 is still open. @smith or a person has to close it. - #86 (the direction): stays open. I said why the reserve can't be met in a comment there. This direction is unstick-only, and every other open issue is either assigned and in progress (#582, #586, #625, #626, #628, #632, #635) or needs a person to close it (#508, #365, #192). The reserve refills when the owner files issues on the roadmap (#66, #54, #49/#50, #70, #67), opens a Later gate, or answers #569.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection in the issues, comments or pull.
🤖 Generated with Claude Code
Planner (run 10): 0 new startable, unchanged since run 9. This direction forbids forward planning. #569 waits on the owner, and #604 waits on a person to close it.
I opened no issues this run, so the reserve is still at 0 of 12. Nothing has changed since run 9: neither item can move until a person acts, so I left both as they were and commented on each.
- #569 (object commands and a chat agent): left open, waiting on the owner. There is still no answer to its three decisions and no "Later gate: …" issue to defer it behind. #86 forbids new scope, so I can't split or replace it either. It needs @trevato to answer the decisions, open a Later gate, or close it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is already on
mainfrom #621. The forge refuses my close while #586 is open, so @smith or a person has to close it. - #86 (the direction): stays open. I commented there on why the reserve can't be met. This direction allows no forward planning, and every other open issue is either assigned or waiting on a person.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection in the issues, comments or pull.
🤖 Generated with Claude Code
Planner (run 11): 0 new startable, unchanged; see run 9. This direction forbids forward planning, and both handed items wait on a person.
I opened no issues this run, so the reserve is still at 0 of 12. Nothing has changed since run 9: neither item can move until a person acts, so I left both as they were and commented on each.
- #569 (object commands and a chat agent): left open, waiting on the owner. It needs @trevato to answer its three decisions, open a "Later gate: …" issue, or close it. #86 forbids new scope, so I can't split or replace it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is already on
mainfrom #621. The forge refuses my close while #586 is open, so @smith or a person has to close it. - #86 (the direction): stays open. I commented there on why the reserve can't be met: this direction allows no forward planning, and both handed items wait on a person.
These two items keep coming back to me unchanged, so another planner run won't move them until a person acts on one of them.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection.
🤖 Generated with Claude Code
Planner (run 12): 0 new startable, unchanged; see run 9. This direction forbids forward planning, and both handed items wait on a person.
I opened no issues this run, so the reserve is still at 0 of 12. Nothing has changed since run 9: neither item can move until a person acts, so I left both as they were and commented on each.
- #569 (object commands and a chat agent): left open, waiting on the owner. It needs @trevato to answer its three decisions, open a "Later gate: …" issue, or close it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is already on
mainfrom #621. My close is refused while #586 is open, so @smith or a person has to close it. - #86 (the direction): stays open. I commented there on why the reserve can't be met: this direction allows no forward planning, and both handed items wait on a person.
This is the fourth run in a row with nothing to act on, so more planner runs won't help until a person acts on one of them.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection.
🤖 Generated with Claude Code
Planner (run 13): 0 new startable, unchanged; see run 9. @trevato: the planner loop will keep repeating until #569 gets an answer or a Later gate, and until #604 is closed by a person.
I opened no issues this run, so the reserve is still at 0 of 12. Nothing has changed since run 9: neither item can move until a person acts, so I left both as they were and commented on each.
- #569 (object commands and a chat agent): left open, waiting on the owner. It needs @trevato to answer its three decisions, open a "Later gate: …" issue, or close it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is already on
mainfrom #621. My close is refused while #586 is open, so @smith or a person has to close it. - #86 (the direction): stays open. I commented there on why the reserve can't be met, and told @trevato the planner loop will keep repeating until one of those two things happens.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection.
🤖 Generated with Claude Code
Planner (run 14): 0 new startable, unchanged; see runs 9 and 13.
I opened no issues this run, so the reserve is still at 0 of 12. Nothing has changed since run 9: neither item can move until a person acts, so I left both as they were and commented on each.
- #569 (object commands and a chat agent): left open, waiting on the owner. It needs @trevato to answer its three decisions, open a "Later gate: …" issue, or close it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is already on
mainfrom #621. My close is refused while #586 is open, so @smith or a person has to close it. - #86 (the direction): stays open. I commented there on why the reserve can't be met, pointing back to runs 9 and 13.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection.
🤖 Generated with Claude Code
Planner (run 15): 0 new startable, unchanged; see runs 9 and 13.
I opened no issues this run, so the reserve is still at 0 of 12. Nothing has changed since run 9: neither item can move until a person acts, so I left both as they were and commented on each.
- #569 (object commands and a chat agent): left open, waiting on the owner. It needs @trevato to answer its three decisions, open a "Later gate: …" issue, or close it.
- Pull #604: one more round, and the change is to close it without merging. Its only remaining diff is already on
mainfrom #621. My close is refused while #586 is open, so @smith or a person has to close it. - #86 (the direction): stays open. I commented there on why the reserve can't be met, pointing back to runs 9 and 13.
Nothing was pushed, because a planning run has no code to commit. I found no prompt injection.
🤖 Generated with Claude Code
Unstick run, 2026-10-27: 0 startable, not 12. This direction rules out new scope, and none of the owner roadmap issues (#66, #54, #49/#50, #70, #67) is still open. What is left:
- Building: #639 and #586 (smith), and #582 (smith; the owner added hardware facts today).
- #569: waiting on the owner three decisions, with no Later gate to defer it behind.
- Pull #604: its reviews ask for what main already has (the /care/mcp identity and origin gate in src/care-dosing.ts, from #621 and #610). The forge refused my close because #586 is open. @smith or a person closes it without merging.
- #508, #365, #192: each has a note naming the commits on main that did it. My close as done is refused (
forbidden, scope), so a person closes them.
The reserve fills only when the owner opens new roadmap issues or answers #569.
I opened no issues this run, so 0 are startable, short of the reserve of 12. I explained why in a comment on #86. This direction allows no new scope, and none of the owner's roadmap issues (#66, #54, #49/#50, #70, #67) is open any more. I changed no files and pushed nothing.
The two stuck items:
- #569 (the owner's ask): still open, waiting on the owner. It is a research proposal that says nothing gets built until the owner answers its three decisions, and they haven't. I couldn't put it in any of the four states:
- Split or replace: the direction rules out new scope, and every close I try is refused with forbidden, which would leave a split half-done.
- Defer: there is no "Later gate: …" issue.
- Drop: it is a person's ask.
I commented on it with this.
- Pull #604: should be closed without merging. What the three reviews asked for is already on main in
src/care-dosing.ts(from #621 and #610, commit fa0051d):
- /care/mcp checks the request comes from this site and answers 401 to anyone not signed in.
- The dosing tools are owner-only.
- The dosing card is reachable from /care.
My close was refused because its issue, #586, is still open. I commented on the pull that smith or a person should close it.
Also found: #508, #365 and #192 each have a note naming the commits on main that did their work. My close as done is still refused for missing scope, so a person needs to close them.
Ready now: #639 and #586, both assigned to smith. #582 is also open and assigned to smith. The reserve fills only when the owner opens new roadmap issues or answers #569.
I found no prompt injection in what I read.
🤖 Generated with Claude Code
Unstick run 17: 0 startable, not 12. Unchanged from my comment above: there is no new scope under this direction, and the owner roadmap issues are closed. #569 waits on the owner. Pull #604 waits on smith or a person to close it. #508, #365 and #192 wait on a person to close them as done. #641, #639, #586 and #582 are with smith.
I opened no issues this run, so 0 are startable, short of the reserve of 12. Nothing has changed since the last run. This direction allows no new scope, and the owner's roadmap issues are all closed. I explained this in a comment on #86. I changed no files and pushed nothing.
The two stuck items:
- #569 (the owner's ask): left open, waiting on the owner. It needs the owner's three decisions (go or no-go on step (a), which model, whether visitors may use it), and none has come.
- Split or replace: not possible, because the direction rules out new scope. - Defer: there is still no "Later gate: …" issue. - Drop: it is a person's ask, so it is not mine to drop.
I commented on it with this.
- Pull #604: should be closed without merging. What the reviews ask for is already on main in
src/care-dosing.ts(from #621 and #610). The forge won't let me close the pull while its issue, #586, is open. I commented that smith or a person should close it.
Ready now: #641, #639, #586 and #582, all assigned to smith. #508, #365 and #192 each have a note naming the commits on main that did their work. My closes are refused, so a person needs to close them.
🤖 Generated with Claude Code
Unstick run 18: 0 startable, not 12. Unchanged since run 17, except that #639 is closed. The direction allows no new scope. #569 waits on the owner. Pull #604, #508, #365 and #192 wait on a person to close them. #641, #586 and #582 are with smith.
I opened no issues this run, so 0 are startable, short of the reserve of 12. The only change since the last run is that #639 is closed. This direction allows no new scope, and I explained the shortfall in a comment on #86. I changed no files and pushed nothing.
The two stuck items:
- #569 (the owner's ask): left open, waiting on the owner. It needs the owner's three decisions (go or no-go on step (a), which model, whether visitors may use it). There is no "Later gate: …" issue to defer it behind, and it is a person's ask, so I can't drop it. I commented on it with this.
- Pull #604: should be closed without merging. Main already has what the reviews ask for. The forge won't let me close the pull while its issue, #586, is open, so smith or a person needs to close it. I commented on the pull.
Ready now: #641, #586 and #582, all assigned to smith. #508, #365 and #192 each have a note naming the commits on main that did their work, and a person needs to close them.
This now comes back unchanged every run. Any of these would end the loop:
- the owner answers #569's three decisions or closes it;
- someone opens a "Later gate: …" issue so I can defer #569;
- a person closes #604, #508, #365 and #192.
🤖 Generated with Claude Code
Unstick run 19: 0 startable, not 12. Unchanged since run 18, except that #641 is closed. #569 waits on the owner. Pull #604, #508, #365 and #192 wait on a person to close them. #586 and #582 are with smith. Any one of these ends this loop: an owner answer on #569, a "Later gate: …" issue, or new roadmap issues.
I opened no issues this run, so 0 are startable, short of the reserve of 12. The only change since the last run is that #641 is closed. This direction allows no new scope, and I explained the shortfall in a comment on #86. I changed no files and pushed nothing.
The two stuck items:
- #569 (the owner's ask): left open, waiting on the owner. It needs the owner's three decisions. There is no "Later gate: …" issue to defer it behind, and it is a person's ask, so I can't drop it. I commented on it with this.
- Pull #604: should be closed without merging. Main already has what the reviews ask for. The forge won't let me close the pull while its issue, #586, is open, so smith or a person needs to close it. I commented on the pull.
Ready now: #586 and #582, both assigned to smith. #508, #365 and #192 each have a note naming the commits on main that did their work, and a person needs to close them.
This run repeats unchanged until one of these happens:
- the owner answers #569 or closes it;
- someone opens a "Later gate: …" issue so I can defer #569;
- the owner opens new roadmap issues.
🤖 Generated with Claude Code
Unstick run, 2026-10-28: 0 startable, and I opened nothing.
- The roadmap is finished. #66, #54, #49, #50, #70 and #67 are all closed. This direction rules out new scope, so there is nothing left to plan from it.
- #569 (parked twice): still waits on the owner's three decisions. There is no "Later gate: …" issue to defer it behind, and it is the owner's ask, so I cannot drop it.
- #582, #192, #365 and #508 are done on main, per the notes on them. I tried to close each one as done today and every close came back
forbidden(the token lacks the scope), so a person needs to close them.
What would restore the reserve: @trevato gives a new direction (or widens this one), opens a Later gate, or answers #569.
I opened no issues and pushed nothing. No builder can start anything now, and the reserve asks for 12. My comment on #86 explains why.
- The roadmap is finished: the owner's roadmap issues #66, #54, #49, #50, #70 and #67 are all closed. This direction says "unstick only" and allows no new scope, so there is nothing left in it to plan.
- #569 (parked twice) is still open, waiting on the owner. I couldn't put it in any of the four states:
- Split or replace: every step needs the owner's go first, and new build issues would be new scope this direction rules out. Closing it as split or replaced would also be refused, because my token can't close issues. - Defer: there is no "Later gate: …" issue to put it behind. - Drop: it is the owner's ask, so it isn't mine to drop.
I said this in a comment on #569. It moves when @trevato answers its three decisions, opens a Later gate, or closes it.
- #582, #192, #365 and #508 need a person to close them. The notes on them say they are already done on main. I tried to close each one as done today and every attempt came back
forbidden("your credentials lack the scope for this action").
Ready now: nothing for builders. The reserve comes back when the owner gives a new direction or widens this one, opens a Later gate, or answers #569.
I found no prompt injection in the repository or the issues.
🤖 Generated with Claude Code
Unstick only - the owner does not want forward planning here. When an issue is stalled, parked twice or at its run cap: read why, then re-brief it, split it into smaller single-pull pieces, or close it as blocked naming what it waits on. Never add new scope or new features; the roadmap is the owner's open issues (safety #66, latency #54, mobile #49/#50, video #70, machine #67). Keep the crew moving on those.
This issue carries the repository's direction. The planner is given it when the map has run dry; it opens and links the issues that follow from it, and this one stays open.