fix: dependency-skipped actions show SKIP in tally, level lines reflect failures#80
Merged
Muizzkolapo merged 5 commits intomainfrom Apr 2, 2026
Merged
Conversation
…ines reflect failures Dependency-skipped actions were incorrectly counted as ERROR in the tally (always showing "0 SKIP") because _handle_dependency_skip set status to "failed". Level completion lines were always green regardless of failures. Changes: - Introduce "skipped" as a proper terminal status for dependency-skipped actions - _handle_dependency_skip now sets status="skipped" and writes DISPOSITION_SKIPPED - _check_upstream_health checks both is_failed and is_skipped for transitive cascade - get_pending_actions and is_workflow_done treat "skipped" as terminal - Level completion lines: red (failures), yellow (skips), green (all OK) - Tally now correctly shows "N OK | M SKIP | K ERROR"
…sing packages (#79) * fix: lazy-load all external provider SDKs to prevent CLI crash on missing packages Previously only Gemini and Mistral used lazy imports in CLIENT_REGISTRY. The remaining providers (OpenAI, Anthropic, Cohere, Groq, Ollama) were eagerly imported at module level, causing the entire CLI to crash with ImportError if any single SDK was missing or version-incompatible — even when the user wasn't using that provider. All external SDK providers now use the same lazy "module:Class" string pattern. Internal providers (agac, hitl, tool) remain eager since they have no external dependencies. _resolve_client() catches ImportError and raises DependencyError with an actionable install command. The preflight validator gracefully skips capability checks for unavailable providers. * test: add sync guard asserting _VENDOR_PACKAGES covers all lazy registry entries Prevents silent degradation of DependencyError messages when a new lazy provider is added to CLIENT_REGISTRY without a corresponding package mapping. * fix: address PR review — test gaps, error handling, and diagnostics - Add tests for ImportError paths: _resolve_client() raises DependencyError with correct context; _resolve_capabilities() returns None gracefully - Fix vacuous pass: snapshot CLIENT_REGISTRY in fixture so sync-guard test checks actual lazy-string entries, not already-resolved classes - Catch AttributeError alongside ImportError for wrong class names in lazy entries (developer error scenario) - Preserve original traceback with `from err` instead of `from None` - Add logger.debug when _resolve_capabilities skips an unavailable SDK - Document DependencyError in invoke_client docstring Raises section
… gaps - Clear DISPOSITION_SKIPPED in _verify_completion_status on re-run (prevents stale skip markers from incorrectly skipping on retry) - Reason string now says "skipped" for cascaded skips instead of "failed" - Add _write_skipped_disposition exception path test - Add level coloring tests (green/yellow/red/precedence) - Explicit is_skipped=False in test_dep_failed_via_state_manager
This was referenced Apr 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
0 SKIP) because_handle_dependency_skipset status to"failed""skipped"as a proper terminal status — the tally now correctly shows"N OK | M SKIP | K ERROR"and level lines show red/yellow/green based on action outcomesChanges
state.py: Addedis_skipped(), updatedget_pending_actionsandis_workflow_doneterminal sets to include"skipped"executor.py:_handle_dependency_skipnow usesstatus="skipped"+DISPOSITION_SKIPPED;_check_upstream_healthchecks both failed and skipped for transitive cascadeaction_executor.py: Level line color: red (failures), yellow (skips), green (all OK)"skipped", added tests for skipped-via-state, skipped-via-disposition,is_skipped(), terminal set behavior, and summary countsTest plan
ruff check .— cleanpytest— 4271 passed, 2 skipped, 0 failures