Route agent dispatch across subscription harnesses - #331
Route agent dispatch across subscription harnesses#331markmhendrickson wants to merge 2 commits into
Conversation
Balance daemon dispatch across Claude, Codex, and Cursor without silently falling back to metered credentials, and add the supporting agent skills, auth propagation, and operator documentation.
|
🤖 Apis — Ateles swarm, swarm dispatcher The review panel still runs and merge stays operator-gated, so nothing is blocked. To restore traceability, file the issue and add a |
|
🤖 Apis — Ateles swarm, swarm dispatcher 🔁 Auto-fix round 1 of 2: routing the panel's blocking findings back to the review agents for guidance, then to the implementer. A new push re-runs the panel. |
|
🤖 Apis — Ateles swarm, swarm dispatcher 🔁 Auto-fix round 2 of 2: routing the panel's blocking findings back to the review agents for guidance, then to the implementer. A new push re-runs the panel. |
|
🤖 Lanius — Ateles swarm, PR gate inheritance
Gate status (pre-impl)
Owner: none (no parent issue) → next: link parent / clear gates, then Vanellus for Labels: none applied on this PR check Gate inheritance check (synchronize re-check)No parent issue could be found for this PR:
Per the legacy-issue rule, this is NOT a "gates never initialized on a known issue" case — there is no issue entity at all to check, retroactively init, or merge into. Without a parent issue, pre-impl gate status cannot be verified from Neotoma Unsigned pre-impl gates (no owning issue to check, so all three are unverified):
Resolution paths
📎 Neotoma: ateles#331 |
Loxia Review 🪶Verdict: COMMENT SummaryThis PR adds five new Findings
RecommendationsNo changes required from the visible diff. Two follow-ups for the author/human reviewer to confirm the parts I couldn't see:
Loxia automated review · commit ee7ef47 |
Unpinned `uv pip install mcp` pulled 2.0, which renames Tool.inputSchema and breaks Server.list_tools. Pin the MCP server lane to 1.x and read tool schemas via either attribute so schema assertions stay green. Co-authored-by: Cursor <cursoragent@cursor.com>
|
🤖 Cicada — Ateles swarm, issue worker
Not opening a new PR; not merging (operator-gated). 📎 Neotoma: ateles#331 |
|
review:pm REQUEST_CHANGES Reviewing scope/acceptance-criteria fit only. No pre-registered pm-gate artifact exists for this PR — I searched Neotoma ( Note on evidence bar: this review is diff-only (no checkout), so findings below are what's evident from the diff text itself — not runtime claims. [BLOCKING] scope-creep: two files unrelated to the PR's stated intent, with no import/reference from anything else in the diff
Per PM lens criteria ("no unrequested scope creep; user-visible behavior matches the issue"), both are out-of-scope additions riding on an unrelated PR. Since there's no pm-gate sign-off artifact to check against, I can't confirm whether these were separately scoped elsewhere — if they were, link the plan/issue in the PR body; if not, split them into their own PR(s) so each ships against its own acceptance criteria and review lens. [NON-BLOCKING] scope-ambiguity: launchd plist path migration bundled in silently
[NON-BLOCKING] scope-fit: everything else maps cleanly to the stated summary
Priority/sequencing: no open questions block sequencing on the routing/auth core — that work is coherent and self-contained. The two BLOCKING items should be pulled into their own PRs before merge so this PR's diff matches its own description. |
|
review:arch Reviewed diff-only (no PR checkout executed) — findings scored against that evidence bar. [NON-BLOCKING] schema-agnostic-design: provider identity is smuggled into [NON-BLOCKING] interface-consistency: three new provider adapters, one shared trust boundary — confirm it holds under diff-only review [NON-BLOCKING] pattern-conformance: No OpenAPI/contract_mappings/MCP/CLI surface is touched by this PR — Verdict: COMMENT — no blocking architectural defect is evident from the diff itself. The 📎 Neotoma: harness_event schema |
|
review:ux COMMENT Reviewed diff-only (no checkout available this run) against the ux lens: discoverable naming, actionable error messages, docs/examples for the new cross-harness dispatch surface. Scope: What works well
Findings[NON-BLOCKING] error-message-actionability: the "no eligible provider" terminal error doesn't hint at the fix msg = (
"no subscription-backed harness provider has usable headroom "
f"(configured={configured}; cooling={cooling})"
)This tells the operator what is wrong (nothing eligible) and why (config + cooldown state), but not what to do — e.g. that [NON-BLOCKING] naming-consistency: [NON-BLOCKING] docs-completeness: new DRAFT agent skills ( Acceptance checklist (ux lens)
No blocking findings — everything above is either a hypothesis about unobserved runtime behavior (correctly downgraded to non-blocking per the diff-only evidence bar) or a minor doc-completeness gap, not a defect evident from the diff structure itself. 📎 PR: #331 |
|
review:legal Diff-only legal lens (jurisdiction: Spain/EU · GDPR + ePrivacy per Compliance checklist
Findings[NON-BLOCKING] secrets/credential-hygiene: [NON-BLOCKING] credential-scope: [NON-BLOCKING] data-handling/public-effect: Cursor adapter invokes [NON-BLOCKING] PII/operator-identifying path: Escalation verdict: sign/merge from legal lens — no [BLOCKING] items; address NON-BLOCKING hygiene in follow-up if desired. Not legal advice. 📎 Neotoma: locale_profile |
|
🤖 Vanellus — Ateles swarm, PR steward Per-lens roll-up
[BLOCKING] (2) — must clear before merge
[NON-BLOCKING] (carry forward)
Merge recommendationDo not merge. Route back to Gryllus to strip or split the two out-of-scope files, then re-run panel. Parent issue
Verdict: REQUEST_CHANGES · Blocking: 2 · Owner: gryllus 📎 Neotoma: ateles#331 · task |
ateles-agent
left a comment
There was a problem hiding this comment.
Aggregated Review Verdict — ateles#331
🤖 Vanellus — Ateles swarm, PR steward
REQUEST_CHANGES
Parent issue: #unknown (not found in PR body / Neotoma). Gate inheritance unverifiable. No merge (operator-gated + blockers).
Per-lens roll-up
| Lens | Verdict | Blocking |
|---|---|---|
| pm (Pavo) | REQUEST_CHANGES | 2 |
| arch (Waxwing) | COMMENT | 0 |
| ux | COMMENT | 0 |
| legal (Buteo) | APPROVE | 0 |
[BLOCKING]
- scope-creep —
execution/scripts/config.py(unused Asana config; not in stated PR intent) - scope-creep —
hooks/logic/spawn_task_neotoma_pairing.py(+__init__.py) — unrelated spawn_task/Neotoma pairing hook
Merge recommendation
Do not merge. Split or drop the two out-of-scope files, then re-dispatch panel / @claude review. Routed to Gryllus (pr_review → changes_requested).
Posted: #331 (comment)
🧠 Neotoma — Vanellus aggregate review ateles#331
Updated (1)
- 🔀 ateles#331 Route agent dispatch… — REQUEST_CHANGES / changes_requested (pull_request)
Created (2)
- ✅ Address ateles#331 PM scope-creep blockers before re-review (task)
- 💬 Aggregated REQUEST_CHANGES comment posted (pr_comment)
Retrieved (1)
- 🔀 ateles#331 (prior gate-inheritance blocked state) (pull_request)
[vanellus] merge_decision: REQUEST_CHANGES — 2 PM BLOCKING scope-creep (config.py, spawn_task_neotoma_pairing); routed gryllus; no merge; parent issue unknown
|
🤖 Apis — Ateles swarm, swarm dispatcher 🔔 Escalated to the operator ( |
Summary
Test plan
uv run pytest execution/daemons/apis/test_harness_router.py execution/daemons/apis/test_skill_runner.py lib/daemon_runtime/test_claude_auth.py(103 passed)uv run pytestcollection needs optional Asana/Pandas/NumPy dependencies and hits existingexecution/mcp/atelespackage-name collection errors