Give the operator a way to resubmit, and baseline progress at launch
Two gaps F33 left behind. F34: the renewal gate exempts a lease with no baseline, so a pane that opened and never started got a full free renewal period. That is the exact case the gate exists to catch, and it happened live at 01:33:37: the stuck run 5 lease renewed to 22:03 on a pane that had not moved since 01:13. Baseline the progress hash at launch, where the pane is already being read. F35: nothing could re-poke a live pane. Orchestra can put text in an editor and be wrong about whether it landed, and the only recovery was to destroy the lease and wait out expiry, roughly an hour. The new "resubmit" action presses Enter on text Orchestra itself submitted. It changes no lifecycle state so it appends no event, and it is fenced like an approval: a live worker-owned pane at the capture revision the operator was looking at. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011xsXyr5J1RACo71YeKG3Pu
This commit is contained in:
@@ -237,7 +237,11 @@ func (r *Registry) Queue(worker string, c Command) (Command, error) {
|
||||
if _, ok := r.workers[worker]; !ok {
|
||||
return Command{}, ErrUnknownWorker
|
||||
}
|
||||
if c.TaskID == "" || c.PaneID == "" || c.CaptureRevision == 0 || (c.Kind != "grant_approval" && c.Kind != "deny_approval") {
|
||||
// "resubmit" presses Enter on input Orchestra already submitted and the
|
||||
// harness never took (F33). It carries no decision, so it is not an
|
||||
// approval, but it is fenced the same way: a live pane and the capture
|
||||
// revision the operator was looking at.
|
||||
if c.TaskID == "" || c.PaneID == "" || c.CaptureRevision == 0 || (c.Kind != "grant_approval" && c.Kind != "deny_approval" && c.Kind != "resubmit") {
|
||||
return Command{}, errors.New("invalid control command")
|
||||
}
|
||||
c.ID = fmt.Sprintf("cmd-%x", sha256.Sum256([]byte(fmt.Sprintf("%s/%s/%s/%d/%d", worker, c.TaskID, c.Kind, c.CaptureRevision, time.Now().UnixNano()))))[:20]
|
||||
|
||||
Reference in New Issue
Block a user