fix(agent-team): wire DeepSeek builder (#60) + plan-gate→build routing + accurate build/verify Slack status #61
No reviewers
Labels
No labels
app
bug
ci
compliance
content
dependencies
docs
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
infra
invalid
javascript
needs-triage
python
question
tests
wontfix
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference: adam/orchestrator#61
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/agent-team-builder-agentic-invoker"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #60. A cluster of build-path fixes found while taking a task end-to-end on the live R720.
Fix 1 — #60 root cause: the live build node used the wrong (turn-exhausting) builder
failsafe_production_p3_wiringnever bound adiff_builder, so the build node fell back tobuilders.default_diff_builder(Claude). Driving Claude to synthesize a diff hit the single-shot turn cap (Reached maximum number of turns). Raisingmax_turns+ adding read-only tools just moved the failure: the tool-using session then exhausted the higher cap reading files before emitting a diff (observed live atmax_turns=8), and even when it didn't, it returned narration instead of a diff.The intended builder already exists and sidesteps all of this:
builders_llm.as_diff_builder()routes the build through DeepSeekfast_coderas a single model completion (with retrieval context + a defensive_extract_diff+ fail-safe no-op). A single completion has no agent turn loop, so it cannot exhaust turns.get_fast_coder()is confirmed working in the daemon environment.coordinator.py— the P3-configured failsafe branch now bindsbuilders_llm.as_diff_builder()as thediff_builder.builders.py—default_diff_builderreverts to a safe single-shot, tool-less fallback (max_turns=4, no tools/budget; tools were what consumed the turns). Keeps_extract_unified_diffso any text builder's diff is recovered (or fails closed withBuildError).invoker.py—allowed_toolsis now threadable throughsubscription_invoker(generic seam; defaultNone → []keeps the single-shot reasoning nodes unchanged).Fix 2 — plan-gate approve dead-ended at END
A human-approved-at-gate plan never built:
GATE_APPROVE_ROUTEwas hard-wired toEND; the P3 splice only repointed the reviewer's build route toBUILD_NODE.graph.py— whenbuild_verify(P3) is wired, pointGATE_APPROVE_ROUTEatBUILD_NODE(mirroringREVIEW'sBUILD_ROUTE); keepENDwhen P3 is inert.Fix 3 — wrong Slack status for build/verify states (#60 secondary observation)
The resume-followup notifier mislabeled build/verify states as plan-review escalations ("PARKED … the plan could not be auto-approved" for a task that had approved, built, and dispatched to CI).
coordinator.py—_post_resume_followupsnow (a) detects the VERIFY async CI-wait suspend and posts "diff built and dispatched to CI (run X); awaiting verification"; (b) infers phaseverifywhen a diff exists; (c) uses build/verify-aware PARKED copy surfacing the CI conclusion. Plan/review parks unchanged.Live verification on the R720
review → build_node → dispatch → verify, and the FAILED/awaiting-CI Slack messages now read correctly (Fix 3 confirmed).Tests
default_diff_buildersingle-shot + tool-less; diff extraction from fenced/bare/narrated responses; narration-only →BuildError.diff_builderwhen configured.BUILD → VERIFY → DONE(CI pass) / parks at VERIFY (inert); P2 gate-approve → END unchanged.verify+ CI conclusion; CI-wait suspend reports in-progress, not parked.ruffclean.Verification owed before merge
Per deploy-then-merge: redeploy and run a task end-to-end — confirm the DeepSeek builder emits a diff CI can apply, and (Fix 2) a gate-approved task advances
plan_gate → build_nodelive.