Fail activation when required skills cannot install - #58626
Conversation
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
An empty failure-count output incorrectly triggers conclusion jobs for skipped or cancelled activations.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Makes required skill-installation failures block agent execution while preserving structured failure reporting for issue #58446.
Changes:
- Fails activation when skill installation errors are collected.
- Enables conclusion reporting for skill failures.
- Adds Go and JavaScript regression coverage.
File summaries
| File | Description |
|---|---|
actions/setup/js/collect_skill_install_failures.cjs |
Marks collected failures as fatal. |
actions/setup/js/collect_skill_install_failures.test.cjs |
Tests success and failure behavior. |
pkg/workflow/notify_comment_conclusion_helpers.go |
Adds skill failures to the conclusion condition. |
pkg/workflow/notify_comment_test.go |
Tests generated condition inclusion. |
.github/workflows/ponytail-reviewer.lock.yml |
Regenerates the conclusion condition. |
.github/workflows/mattpocock-skills-reviewer.lock.yml |
Regenerates the conclusion condition. |
.github/workflows/impeccable-skills-reviewer.lock.yml |
Regenerates the conclusion condition. |
.github/workflows/daily-documentation-diagram.lock.yml |
Regenerates the conclusion condition. |
.github/workflows/archivx-agentic-workflows-analyzer.lock.yml |
Regenerates the conclusion condition. |
Review details
- Files reviewed: 9/9 changed files
- Comments generated: 1
- Review effort level: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
| if len(data.SkillReferences) > 0 || len(data.Skills) > 0 { | ||
| skillInstallFailed := BuildNotEquals(BuildPropertyAccess(fmt.Sprintf("needs.%s.outputs.skill_install_failure_count", constants.ActivationJobName)), BuildStringLiteral("0")) | ||
| activationGuardrailsFailed = BuildOr(activationGuardrailsFailed, skillInstallFailed) | ||
| } |
|
Lean already. Ship. Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "ab.chatgpt.com"See Network Configuration for more information.
|
|
🧠 Matt Pocock Skills Reviewer failed during the skills-based review. Warning Threat Detection Engine Failure — The analysis engine could not complete. This is a tooling failure, not a security finding. What happenedThe threat detection engine failed to produce results. Review the workflow run logs for details.
|
|
✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft. No ADR enforcement needed: PR does not have the implementation label and has <=100 new lines of code in business logic directories.
|
|
✅ Test Quality Sentinel completed test quality analysis. Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff
|
|
✅ PR Code Quality Reviewer completed the code quality review. Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "github.com"See Network Configuration for more information.
|
Comment MemoryNote This comment is managed by comment memory.It stores persistent context for this thread in the code block at the top of this comment. Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "github.com"See Network Configuration for more information.
|
There was a problem hiding this comment.
Requesting changes
The activation-failure path is headed in the right direction, but there is still a blocking edge case in the conclusion-job condition that can fire on skipped activation and create noise on workflows that never ran.
Warning
Firewall blocked 1 domain
The following domain was blocked by the firewall during workflow execution:
github.com
To allow these domains, add them to the network.allowed list in your workflow frontmatter:
network:
allowed:
- defaults
- "github.com"See Network Configuration for more information.
🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt54 · 17.5 AIC · ⌖ 7.32 AIC · ⊞ 23.5K
Comment /review to run again
@copilot Please take the next forward-progress pass on this PR.
Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "github.com"See Network Configuration for more information.
|
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Updated |
|
@copilot PR sous-chef triage: please address the blocking review feedback, refresh the branch if needed, and run the Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "github.com"See Network Configuration for more information.
|
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
The blocking review feedback is addressed in |
|
Category: bug | Risk: high | Score: 82 | Breakdown: impact 44/urgency 26/quality 12 | Action: fast_track | Batch: workflow-safety
|
@copilot Please take the next forward-progress pass on this PR.
|
Reconciled the current head ( |
Declared skills could fail to install without failing the workflow, allowing the agent to run without required policy or safety guidance. Skill failures must instead stop agent execution while remaining visible in the failure issue or comment.
Failure handling
core.setFailed(...)after publishing structured failure outputs.Failure reporting
skill_install_failure_count != '0'.