You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Apr 11, 2026. It is now read-only.
- On `status: rejected` → emit a `Blocked:` summary and skip the file.
92
-
- On timeout → note in completion evidence and continue with alternative approach.
92
+
- On timeout → mark task as blocked: `$FLOWCTL block <TASK_ID> "Approval timeout: requested access to <path>"` and continue with alternative approach.
93
93
94
94
**Via SendMessage (non-Teams mode):**
95
95
```
@@ -192,6 +192,16 @@ For each entry returned, fetch its content and include verbatim in your context:
192
192
```
193
193
These are lightweight narrative handoffs from earlier tasks in this epic — read them to understand what upstream work surprised the previous worker, what decisions they made, and what gotchas to watch for. Skip gracefully if the list is empty (new epic) or if `outputs.enabled` is false.
194
194
195
+
**Spec hash verification (mid-wave protection):**
196
+
If the coordinator passed a `SPEC_HASH` value in your prompt, compare it against the current spec:
Save this - you'll pass it to impl-review so it only reviews THIS task's changes.
322
332
333
+
**Heartbeat signaling:** Every 60 seconds during implementation, call:
334
+
```bash
335
+
$FLOWCTL heartbeat --task $TASK_ID
336
+
```
337
+
This signals liveness to the coordinator. The coordinator checks heartbeats every 3 minutes. If no heartbeat is received within that window, the worker is considered hung and may be terminated.
338
+
323
339
### Wave-Checkpoint-Wave Execution
324
340
325
341
When a task touches **3+ files**, use the Wave pattern to parallelize file I/O. This achieves 3-4x speedup over sequential reads/edits.
@@ -376,7 +392,7 @@ If more files remain (tests, docs, config), repeat: parallel read → checkpoint
376
392
message: "Access request for <TASK_ID>.\nFile: <path>\nReason: <why needed>\nCurrent owner: <task-id if known>")
377
393
```
378
394
2. Wait for`status: approved`/`rejected` (API) or "Access granted:"/"Access denied:" (fallback)
379
-
3. If timeout, skip the file and note it in your completion evidence
395
+
3. If timeout, mark task as blocked: `$FLOWCTL block <TASK_ID>"Approval timeout: requested access to <path>"` and continue with alternative approach
380
396
4. On rejected/denied, find an alternative approach that stays within your owned files
381
397
382
398
**This is not optional.** Do not bypass this check even if you believe the lock system will catch violations. Self-enforcement is the primary guard; hooks are the backup.
@@ -719,7 +735,7 @@ If you catch yourself thinking any of these, stop and follow the correct action:
719
735
| Thought | Reality |
720
736
|---------|---------|
721
737
| "I need to edit a file not in OWNED_FILES" | Create a `flowctl approval create --kind file_access` (or fallback "Need file access:" message) and WAIT. Do not edit. |
722
-
| "The coordinator isn't responding" | `approval show --wait --timeout 600` blocks ≤10min; on fallback path wait 60s. If timeout, skip the file and note it in evidence. |
738
+
| "The coordinator isn't responding" | `approval show --wait --timeout 600` blocks ≤10min; on fallback path wait 60s. If timeout, call `$FLOWCTL block <TASK_ID>"Approval timeout: requested access to <file>"` and continue with alternative approach. |
723
739
| "I'll just edit it, the lock check will catch it" | Don't rely on hooks. Self-enforce OWNED_FILES. |
724
740
|"TEAM_MODE doesn't matter for this task"| If TEAM_MODE=true is set, follow the protocol. Always. |
725
741
|"It's a small edit, nobody will notice"| Ownership violations break parallel safety for everyone. |
Workers compare this hash during re-anchor (Phase 2). If the spec changed since wave start, log:
182
+
```
183
+
"Warning: spec for <task-id> changed since wave start (hash mismatch)"
184
+
```
185
+
Continue execution but note the mismatch in evidence.
186
+
147
187
**Check these fields exist and are non-empty:**
148
188
-`## Description` — what to build (not just a title)
149
189
-`## Acceptance` — at least one testable `- [ ]` criterion
@@ -238,6 +278,7 @@ Agent({
238
278
team_name: "flow-<epic-id>",
239
279
isolation: "worktree",
240
280
run_in_background: true,
281
+
timeout: 2700000,
241
282
prompt: "$WORKER_PROMPT
242
283
243
284
TASK_ID: <task-id>
@@ -263,6 +304,12 @@ Spawn ALL ready task workers in a SINGLE message with multiple Agent tool calls.
263
304
264
305
Wait for all workers to complete.
265
306
307
+
**Worker timeout handling:** If a worker times out (exceeds the 45-minute ceiling):
308
+
```bash
309
+
$FLOWCTL fail <task-id>"Worker timeout after 45min"
310
+
```
311
+
This triggers the retry logic in the task lifecycle (`up_for_retry` if retries remaining). Log the timeout and continue processing other workers in the wave.
0 commit comments