Repository navigation
Build a delivered plan's later changes on demand without LIVE_BUILD - #510
Conversation
0bbd082 to
544f209
Compare
|
Review: Changes needed Diffed against What holds up
Findings
ChecksAfter the hash renewal commit ( |
544f209 to
e057999
Compare
0b39f4d to
891b7c9
Compare
e057999 to
2c5639e
Compare
3ccfcd5 to
3aa5751
Compare
2c5639e to
7e3824a
Compare
3aa5751 to
fc7364c
Compare
7e3824a to
3778af8
Compare
fc7364c to
a37a5d3
Compare
150759f to
c05084d
Compare
a37a5d3 to
0aefc7d
Compare
c05084d to
7651762
Compare
60a8677 to
d58b3dc
Compare
A browser build that delivers now records its built source in manual mode, so edits read as "N changes to build". The capsule's Build queues one rebuild of those edits onto the existing pull requests on the presser's own agent, reusing queueRebuild without LIVE_BUILD's automatic trigger. Retry on a failed rebuild uses the same route. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A person's Build now waits, like Build plan, for open decisions and accepted comments: the server refuses it and the capsule's Build is inert with the reason. The press is the approval for the rebuild's tasks, now documented at reportRebuild, in the lifecycle docs and in AGENTS.md. A manual live record restores only for a delivered run. A refused Build shows inline (on a phone, Build opens with it) and clears once the changes build. On a phone the action reads "Build changes", and only people who can build are told it runs on their agent. A server test now runs read_rebuild and report_rebuild without LIVE_BUILD. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Build does A pressed Build skips connections running a prototype or another document's build, as POST /implementation does, and answers agent-busy when none is free instead of no-workspace. Rebuild refusals read through the shared copy mapper. Cancelling a waiting Build plan refuses an archived document. Route tests cover pull-only callers, archived documents, children, a collaborator's press on their own agent, a busy agent, and reopening after a manual rebuild. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The completing fixture agent now reads and reports a rebuild, so the e2e test waits for Built and a recorded commit instead of accepting Build failed. It finds the capsule's Build by role rather than by class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Whitespace only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…build Behind LIVE_SPIKES=on (also on with LIVE_BUILD=on), a SpikeScout scans a document 20 seconds after a person's edit settles, only while it has no live build. It judges at most five unseen prose blocks per scan with one Jev noul each (>= 0.6; explicit-uncertainty matching when Jev is absent or fails) and keeps at most three spikes active. A hit becomes an investigation marked as a spike, attributed to the last editor and authorized on that person's live repository connection; with no connection nothing is created. A "Prototyping…" Callout is placed directly under the passage after the record persists, and is rewritten in place when the spike completes or stops. Removing the callout dismisses the spike, and a passage whose digest has a spike never re-triggers. Spike runs get run-scoped upload_investigation_image and submit_spike_result tools; the server builds the report from the headline, findings, recommendation and uploaded images. Spikes stay out of the investigation list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A claimed spike checks out chopin/spike-<id> in the disposable worktree, gets a prompt to build the smallest prototype, upload screenshots and report with submit_spike_result, and relays the server's run-scoped tool list through the stdio bridge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scope image uploads to spike runs with a three-image cap and a per-run citation check, and raise the connector body limit only for that tool. Make LIVE_SPIKES independent of LIVE_BUILD. Persist a placing state before a callout is published and recover in place. Stage callouts with copied, rebased decision and comment anchors. Keep human edits inside a callout by placing new state in a sibling. Leave passages unjudged when Jev fails, keep approved over-capacity passages for later scans, and dismiss deleted callouts after a living build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Spike runs get a connector-local upload_image_file that reads a PNG, JPEG or WebP from the run worktree and forwards it, so agents no longer emit base64 and the prompt asks for 1280x800 Playwright screenshots. Callouts read Queued until their run is claimed, and runs dispatch in creation order. A scan that leaves passages unjudged follows up in five seconds, passages already above a spike callout are skipped, and deleting a callout stops its spike on the edit rather than the next scan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y frees Copilot CLI in ACP mode rejects client-provided stdio MCP servers, so every spike failed without a result. A spike run whose agent accepts HTTP servers now gets a per-run streamable-HTTP bridge on 127.0.0.1, guarded by a random bearer token and closed with the run, that relays the run's Chopin tools and adds upload_image_file. Agents without HTTP support keep the stdio bridge. A scan that stopped at the active-spike cap never judged the waiting passages until another edit. It now resumes when a spike record changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d lock Concurrent upload_investigation_image calls in one run now share one per-run set and reserve their slot before awaiting storage, so neither overwrites the other and the three-image cap holds. A spike placement deferred while a first build locks editing is retried when the lock releases and when the room opens unlocked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A crashed connector left its lock behind and blocked every later start until someone removed the file. A lock naming a process that no longer exists is now stale and replaced; a live or unreadable lock still refuses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A queued first build already holds the editing lock, so a spike that finished while the build waited had its callout deferred until after the build. The spike refresh may now update its callout under a build that is only queued, rebinding the build and its approved graph to the callout-only revision in the same commit, and the build claim waits (bounded) for those results to land. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… a build A spike needs the editor's opt-in at pairing and judges only passages that editor changed in their own edits, so nobody else's text runs on their laptop. Without Jev nothing is spiked unless LIVE_SPIKES_REGEX_JUDGE=on. Spikes are capped per document and per editor each hour and interrupted 20 minutes after their claim. A spike run cannot submit an investigation or experiment result. A finding no longer lands under a queued first build by moving its approved graph to a new revision: any build lock defers the callout until the build ends. The connector runs a spike under Git configuration that refuses every push and removes its worktree and branch afterwards. Callout deletion is detected anywhere in the tree, a placement that throws gives its slot back, image uploads check size before reading, and a file named ..shot.png is no longer mistaken for one outside the worktree. Briefs and judge prompts frame document text as untrusted data. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36eeb69 to
8cec41e
Compare
Slice 2 of the approved build-plan jig. Stacks on #508.
What changes
LIVE_BUILD, a browser build that delivers (verification passed) now records the source it built (plan.live). The flag-off lifecycle is unchanged: verification still ends the run, and nothing auto-triggers. The live record now restores for a verified manual run as well as a live one.POST /api/channels/:id/implementation/rebuildchecks the origin and write access, then reusesqueueRebuildto queue one rebuild of the edits onto the existing pull requests on the presser’s own connected agent. It persists the rebuild before answering and before announcing. A collaborator’s tooltip says “Edits since @Maggie built it. Building them runs on your agent.”LIVE_BUILDthe capsule still shows a clock and no Build.implementation-lifecycle.md.Tests
apps/serverunit tests andimplementation-launcherpass locally.Screenshots
Desktop and phone: 3 changes to build with Build, Build failed with Retry, and a collaborator with 2 changes.
Review fixes
queueRebuildand the route while decisions or accepted comments are open. The capsule’s action stays visible but inert, with the same reason as Build plan in its tooltip and accessible description.reportRebuild, indocs/implementation-lifecycle.mdand in AGENTS.md “Implementation graphs”, replacing the LIVE_BUILD-only wording.restoreLiveaccepts a live run, or a manual run whose outcome isimplementedordelivered. A run returned for changes is rejected; the new test covers this.read_rebuild→report_rebuild, then reads as up to date (changes: 0).Review fixes (restack, 2026-10-12)
options.busyand the connector's busy check). When none is free it answersagent-busy, shown as "Your local agent is busy with another document".|Build failedis no longer accepted. It finds the capsule's Build by role, not by class.aria-disabledandaria-busyinstead ofdisabled.🤖 Generated with Claude Code