Skip to content

fix(pipeline): make dynamic crews real and no-work runs visible - #285

Merged
Sam123ben merged 2 commits into
mainfrom
security/devai-hardening-pass
Aug 23, 2026
Merged

fix(pipeline): make dynamic crews real and no-work runs visible#285
Sam123ben merged 2 commits into
mainfrom
security/devai-hardening-pass

Conversation

@Sam123ben

Copy link
Copy Markdown
Member

Why

A Compose run against tesserix/test-repo with Crew = Dynamic finished DONE with every agent Idle and nothing built. Worker logs show run-crew starting and returning immediately: _resolve_crew only matched a crew by id or by name, and with three seed crews present its "exactly one seed" last resort never fired — so it returned a successful StageResult carrying crew_error: no_crew, which the executor recorded as a completed stage.

What changed

Crew resolution

  • select_crew picks the best seed crew from the intent, repo and detected tech stack; crew seeds now carry tags + routing keywords.
  • Signal-free intents fall back to default_crew (new setting, backend_crew), then to a crew tagged default — never the SRE investigation crew.
  • A genuinely unresolvable crew returns ok=False, so on_failure applies and the run reports the failure instead of a silent DONE.

Honest run verdict

  • assess_work + post_report detect a run where every stage degraded to a stub and mark it ok=False / run_verdict=no_work, with the reason in the run report.

Compose UX

  • The composer says what is still missing before Run is armed, instead of the blanket "Intent and repo are required".
  • A dispatch is never silent: a status strip (state · current stage · elapsed · run link) stays in the composer card and the live area scrolls into view.
  • RepoPicker no longer renders a typed-but-unpicked value as if it were selected.

Tests

  • tests/integration/test_all_blueprints_execute.py — all 15 shipped blueprints execute to a terminal state and produce output (app-scaffold and sre-monitor skip the output assertion; their work happens in the K8s job runner / cluster).
  • New dynamic-selection and run-verdict unit tests.
  • 1813 passed, 3 skipped; ruff clean; dashboard tsc --noEmit + next build clean.

A composer run with Crew=Dynamic resolved no crew, so run_crew returned a
successful StageResult and the pipeline reported DONE having built nothing.

- select_crew picks a seed crew from the intent/tech-stack keywords, with a
  configurable default that is never the SRE crew
- crew seeds carry tags + routing keywords
- an unresolvable crew now fails the stage (ok=False) instead of passing
- post_report asserts the run produced output and flags no-work runs
- compose UX: states what is missing before Run, keeps a status strip
  (state, stage, elapsed, run link) in the card, scrolls the live area in
- every shipped blueprint is now executed end to end in tests
@Sam123ben
Sam123ben merged commit 125d194 into main Aug 23, 2026
12 of 14 checks passed
@Sam123ben
Sam123ben deleted the security/devai-hardening-pass branch August 23, 2026 13:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant