Issue #34: the loop waits for the creator job's sub-jobs, reviewers get the sub-job table as evidence, a run with sub-jobs voids a round whose source changed during review, and a pane caller reaches an agent of another workspace on its own server. VERSIONS.md carries the entry; the merge-side reports (round 1 @ed293dc and round 2 @e80186f with identity sidecars, baseed293dc-> heade80186f, evidence review-tree) are archived under .agents/reports/<session>/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
6.1 KiB
6.1 KiB
Review Report: PR #38 Delta Review Round 2 (fix(#34) @ e80186f)
- Job ID:
f17a85df - Reviewer: Antigravity (
agy, session:herdr:reviewer-agy-01, Role:Reviewer) - PR Target: #38 (
fix/issue-34@e80186f, previous review targeted293dc, basemain7a4a0c2/ v4.7.3) - Review Identity & Tree:
loop_id:loop-20260925T072328Z-2f5853base:ed293dcef4c346e0050a31cb46812bcdcf1d67cfhead:e80186f56064eaf93a2f32c48d31d84816894774tree:3501868872d828894f031911b8ca31b01ce77a72
- Verification Worktree:
/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20260925T072328Z-2f5853/1 - Verdict: PASS
1. Executive Summary & Verification Context
This is the Round 2 Delta Review of PR #38, evaluating the two commits (8a9101e and e80186f) added on top of ed293dc to resolve the review findings from Round 1:
- N1/R1 (grok / codex, blocking):
registry.get_feedbackpreviously only parsedcompletedanderrorevents, discardingcancelledevent details. Sub-jobs cancelled prior to injection (e.g.,target_not_foundorsession_busy) surfaced in the review table as bare uninformativecancelledrather thanNOT-DISPATCHED. - R2 (codex, blocking): Remote runner deadlines publish
error --detail "deadline_timeout (remote runner)". Exact-string matching in_subjob_statefailed to identify this as an orchestrator timeout, missingCLOSED-UNCONFIRMEDcategorization and late-write warnings. - K1 (claude, non-blocking): The
[귀속되지 않은 열린 잡]section displayed orphan jobs without explicit adjudication instructions.
Verification Identity & Git Cleanliness
git rev-parse HEAD=e80186f56064eaf93a2f32c48d31d84816894774git rev-parse 'HEAD^{tree}'=3501868872d828894f031911b8ca31b01ce77a72git diff ed293dc...HEAD --check= Clean (0 issues)git diff 7a4a0c2...HEAD --check= Clean (0 issues)- Worktree Status: Clean
2. Detailed Verification of Round 1 Corrective Changes
(1) N1/R1 Fix: get_feedback Event Filtering & cancelled Detail Capture
- Files Modified:
lib_py/delegation/registry.py:get_feedback(job_id, registry_dir=..., events=("completed", "error"))lib_py/loop/runner.py:_subjob_state()passesevents=("completed", "error", "cancelled")
- Audit Findings:
- Preserved Default Semantics:
eventsparameter defaults to("completed", "error"). Existing callers (such asregistry.pyCLIfeedback/ line 669) that pass onlyjob_idandregistry_dirremain 100% backward-compatible. - Dual-Path Support: Both the primary unified ndjson audit log path (
e.get("source_event") in events/e.get("event") in events) and the fallback local.events.logpath (payload.get("event") in events) correctly check againstevents. - Regression Test T13: Added
test_t13_a_sub_job_cancelled_before_injection_is_not_dispatched_in_the_tableparametrized over["target_not_found", "session_busy"]. Both cases pass and confirm classification into| NOT-DISPATCHED | <reason> |. Without the fix,reasonis empty and the table displayscancelled | -, failing the assertion.
- Preserved Default Semantics:
(2) R2 Fix: Prefix Matching for Orchestrator Timeout Strings
- File Modified:
lib_py/loop/runner.py:closed_kind = reason.split(" ", 1)[0] if reason else "" if closed_kind in ORCHESTRATOR_CLOSED or (status == "error" and not reason): return "CLOSED-UNCONFIRMED", reason or "-"
- Audit Findings:
- Accurate Prefix Extraction:
reason.split(" ", 1)[0]extracts the initial keyword (e.g.,"deadline_timeout"from"deadline_timeout (remote runner)"). - No Misclassification: The candidate set
ORCHESTRATOR_CLOSEDstrictly equals{"deadline_timeout", "agent_blocked"}. Other failure or cancellation reasons (such assession_busy,target_not_found, orrolled back...) have prefixes not in this set and therefore are never misclassified asCLOSED-UNCONFIRMED. - Regression Test T14: Added
test_t14_the_remote_runners_deadline_wording_is_closed_unconfirmedusing the real registry and event publisher. VerifiesCLOSED-UNCONFIRMEDstate and미확인 종결 1warning in the prompt. Withoutclosed_kind, this test fails.
- Accurate Prefix Extraction:
(3) K1 Fix: STRAY_RULE Guidance for Unparented Open Jobs
- File Modified:
lib_py/loop/runner.py: AddedSTRAY_RULEconstant and conditional injection intostray_lineif and only ifstrayis non-empty.
- Audit Findings:
- Rule Coherence:
SUBJOB_RULEinstructs reviewers to fail the round if any known sub-job is open, unconfirmed, or failed.STRAY_RULEinstructs reviewers to fail the round if any unparented open job's deliverables were necessary for the task objectives. The two rules operate harmoniously and without contradiction. - Prompt Hygiene: When neither registered sub-jobs nor stray jobs exist,
_subjobs_block()continues to return"", ensuring byte-for-byte prompt parity for non-delegating tasks. - Regression Test T6 Assertion:
test_t6_an_unattributed_open_job_is_shown_and_waited_for_only_on_requestnow asserts thatSTRAY_RULEis included in the reviewer prompt.
- Rule Coherence:
3. Test Suite & Regression Verification
All tests were executed against the verification worktree (loop-20260925T072328Z-2f5853/1):
tests/test_issue34_job_tree.py:- 20 / 20 PASSED (including T13 parametrized × 2, T14, and updated T6) in 84.48s.
tests/test_version_consistency.py&tests/test_issue5_phase1_delegation.py:- 69 / 69 PASSED in 12.07s.
tests/test_issue23_24_startup_path.py&tests/test_loop_cli.py:- 79 / 79 PASSED in 195.92s.
- Overall Total: 168 tests passed, 0 failures, 0 regressions.
4. Conclusion
All Round 1 reviewer findings (N1, R1, R2, K1) have been accurately addressed with clean, minimal code changes and rigorous regression test coverage. No edge-case misclassifications, prompt pollution, or regressions were detected. Version lockstep bump to v4.7.4 is properly reserved for the orchestrator release commit.
[VERDICT: PASS]