fix(issue-6): fail-closed registry timeout and TUI turn handshake
- Introduce finalize_unfinished in multi-agent-mux-delegate-job for fail-closed atomic transitions - Enforce CAS dispatch_token and attempt_id pinning across engine, CLI, and lifecycle scripts - Integrate Herdr wait_for_agent_idle turn handshake to prevent prompt loss and race conditions - Resolve bash 3.2 set -u empty array expansion compatibility in lib.sh - Preserve Issue #5 R2 contract in CAS transition engine (engine.py, publish_event.py, service.py) - Add comprehensive regression suites (test_issue6_fail_closed.py, test_issue6_turn_handshake.py) - Bump lockstep framework and skills to v4.4.1 across lib.sh, eager.py, VERSIONS.md, 8 SKILL.md - Synchronize documentation (IMPROVEMENTS.md, MESSAGING.md, state-transitions.md, task.md, phase5-e2e.md) - Unanimous PASS achieved across 4 reviewer team leaders (Claude, Codex, OpenCode, Grok) Closes #6
This commit is contained in:
1 parent
7b761be7b8
commit
ec61511699
51 files changed
+3477
-293
No files matched your search
@@ -0,0 +1,46 @@
|
||||
# Issue #6 Phase 1–5 9th-round consensus review (uncommitted vs `7b761be`)
|
||||
|
||||
- **Reviewer**: `reviewer-creator-grok-01`
|
||||
- **Job**: `f0607b93`
|
||||
- **HEAD**: `7b761be` (Issue #6 work still uncommitted)
|
||||
- **Prior Grok round**: `eb76c119` NOT PASS (T1-1, T2-9 `TimeoutExpired`)
|
||||
- **Lockstep**: `lib.sh` / `eager.py` / `VERSIONS.md` / 8× `SKILL.md` = **4.4.1**
|
||||
- **Static**: `git diff --check 7b761be` clean
|
||||
|
||||
---
|
||||
|
||||
## 1. Round-8 product items (unchanged, still hold)
|
||||
|
||||
| Item | This turn |
|
||||
|---|---|
|
||||
| **B1** bash 3.2 empty arrays | `lib.sh:1913`, `:2007` `${extra[@]+"${extra[@]}"}` only |
|
||||
| **B2** R2 | Named `expected_attempt` still fail-closes if the record has none. Unpinned terminal refuse is `attempt_id > 1` + token present + non-operator |
|
||||
| **P2** stop/create pin | `stop_session.sh` / `create_session.sh` pass token and attempt into `delegate_publish_event`; `cli.py` forwards flags; `MAM_JOBS_DIR` → `--registry-dir` |
|
||||
| **N1** | `delegate_wrapper` in `OPERATOR_SOURCES` and `state-transitions.md` / `MESSAGING.md` §5.1 |
|
||||
|
||||
---
|
||||
|
||||
## 2. The two previous failures
|
||||
|
||||
`_run_wrapper` default and the listed cases (`t1_1`, `t1_2`, `t1_4`, `t1_5`, `t1_7`, `t1_8`, `t1_14`, `t1_15`, `t1_16`, `t1_20`, `t2_8`, `t2_9`) now use **timeout=60**.
|
||||
|
||||
This turn:
|
||||
|
||||
- Isolated **T1-1 + T2-9: 2 passed in 11.49s**
|
||||
- Brief suite: **211 passed in 211.39s**, 0 failed
|
||||
|
||||
The hang class from `eb76c119` did not reproduce under this load. The original Issue #6 3900s `wait_for_job` stall is not what those two tests were hitting; they were `subprocess` deadlines around a slow subscriber connect / idle handshake.
|
||||
|
||||
---
|
||||
|
||||
## 3. Residuals (non-blocking)
|
||||
|
||||
1. **Test budget, not a tighter product bound.** Subscriber `connect` is still `with_retry` (3 attempts) and is not clipped to `--timeout 6` / `--idle-timeout 2`. Under a loaded machine the wrapper can still take tens of seconds before fail-closed runs. 60s pytest headroom hides that; it does not cap connect. Worth a later bound (`min(TIMEOUT, connect retries)`), not a reason to block this round.
|
||||
2. **T1-25** still calls `delegate_publish_event` with a pinned token, not the `stop_session.sh` binary. Script wiring was read and is correct.
|
||||
3. Full 793-suite not re-run this turn (211 targeted).
|
||||
|
||||
No `[ESCALATE: PLANNER]`.
|
||||
|
||||
---
|
||||
|
||||
[VERDICT: PASS]
|
||||
Reference in new issue
Block a user