-
Notifications
You must be signed in to change notification settings - Fork 0
chore(sync): rebuild wff-code/wff-chat from .claude@46d5a95 #9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -367,6 +367,10 @@ Read all YAML files under `.github/workflows/` using Glob, then Read each one. F | |||||||||||
| > runs anywhere is not a finding. If a repo is found still running either | ||||||||||||
| > action, flag the workflow itself for removal (see repo-compliance CI-036/ | ||||||||||||
| > CI-081, retired) rather than auditing its `continue-on-error` setting. | ||||||||||||
| > #ASSUME: the paid-GHAS billing status applies fleet-wide regardless of a | ||||||||||||
| > given repo's visibility. #VERIFY: check that repo's actual GHAS entitlement | ||||||||||||
| > in GitHub Settings > Code security before treating a live dependency-review | ||||||||||||
| > or CodeQL step there as a non-finding. | ||||||||||||
|
Comment on lines
+372
to
+373
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Apply the GHAS entitlement check to CodeQL only. The repo-compliance policy retires Proposed wording- > in GitHub Settings > Code security before treating a live dependency-review
- > or CodeQL step there as a non-finding.
+ > in GitHub Settings > Code security before treating a live CodeQL step there
+ > as a non-finding. Report any live dependency-review step because it is
+ > retired fleet-wide.📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||
| 2. The same step has `continue-on-error: true` | ||||||||||||
|
|
||||||||||||
| > **`gitleaks/gitleaks-action` is intentionally excluded from this allowlist.** | ||||||||||||
|
|
||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -43,8 +43,9 @@ level-1 panel. Re-rate them when real benchmark numbers land. | |||||||||
| ## Known gap: refresh does not detect price drift | ||||||||||
|
|
||||||||||
| `consensus_cli.py refresh` diffs model IDs only. It cannot see a live price | ||||||||||
| change on a model that is still alive, and `input_cost` is what assigns a model | ||||||||||
| to a cost tier band and what feeds the cost cap. The 2026-08-25 refresh found | ||||||||||
| 10 rows whose prices had drifted, one by 7.3x (`openai/o4-mini`, 0.15 -> 1.10). | ||||||||||
| Re-check prices against `https://openrouter.ai/api/v1/models` during any | ||||||||||
| change on a model that is still alive. `input_cost` alone assigns a model to a | ||||||||||
| cost tier band (`models_in_cost_tier`), but the cost cap (`estimate_model_cost`) | ||||||||||
|
Comment on lines
+46
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Qualify the For paid tiers, Proposed wording-`input_cost` alone assigns a model to a cost tier band (`models_in_cost_tier`), but the cost cap (`estimate_model_cost`)
+For paid tiers, `input_cost` assigns a model to a cost tier band (`models_in_cost_tier`); the `free` tier checks both `input_cost` and `output_cost`. The cost cap (`estimate_model_cost`)📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||
| reads both `input_cost` and `output_cost`. The 2026-08-25 refresh found 10 rows | ||||||||||
| whose prices had drifted, one by 7.3x (`openai/o4-mini`, 0.15 -> 1.10). | ||||||||||
| Re-check both fields against `https://openrouter.ai/api/v1/models` during any | ||||||||||
| refresh, not just liveness. | ||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1273,7 +1273,7 @@ platform: resolve against the platform's live docs and the CI-pinned tool versio | |
| | CI check | Static validation | | ||
| | --- | --- | | ||
| | ClusterFuzzLite | For each fuzz target declared in workflow: verify file exists at the declared path, has the correct extension (`.py` for Python), and compiles with `python3 -m py_compile {target}` | | ||
| | SARIF-producing scanners (Trivy, Snyk, Scorecard, SBOM) | If workflow references a SARIF file path, verify the generating step would produce it (check step ordering and output paths). SARIF now feeds `actions/upload-artifact`, not `github/codeql-action/upload-sarif`/Security tab ingestion, since GitHub Advanced Security is no longer free; verify the artifact-upload step exists where a scanner's SARIF was its only output. | | ||
| | SARIF-producing scanners (Trivy, Snyk, Scorecard, SBOM) | If workflow references a SARIF file path, verify the generating step would produce it (check step ordering and output paths). Only `codeql.yml` and `dependency-review.yml` (deleted 2026-09) stopped producing SARIF; `sbom.yml`'s Grype and OSV-Scanner jobs still call `github/codeql-action/upload-sarif` to ingest into the Security tab (categories `grype-runtime-deps`, `osv-sbom-runtime-deps`), matching `.github/workflows/README.md:120-129`. Verify the `upload-sarif` step exists for those, and treat `actions/upload-artifact` as a backup copy of the raw SBOM/SARIF file, not a replacement for Security-tab ingestion. | | ||
|
|
||
| | SonarCloud | Verify `sonar-project.properties` has non-placeholder values for `sonar.organization` and `sonar.projectKey` | | ||
| | Codecov | If `codecov.yml` exists, verify it parses as valid YAML and references existing flag names | | ||
|
|
||
|
|
@@ -1620,25 +1620,27 @@ still serves dangling commits, so use `compare`, not existence. Validate the fix | |
| `if:`). When the failure appeared right after an edit, confirm causation by reverting the | ||
| suspected change on the current base before committing to a fix direction. | ||
|
|
||
| **SARIF / code-scanning orphan checks (legacy, pre-2026-09):** GitHub's CodeQL code scanning | ||
| and SARIF ingestion into the Security tab now require paid GitHub Advanced Security (Code | ||
| Security); `codeql.yml` and `github/codeql-action/upload-sarif` steps were removed fleet-wide, | ||
| so "Code scanning results / *" checks should no longer appear on new PRs at all. If one is | ||
| still visible, it is a leftover from before the billing change, not a live analysis: treat it | ||
| as permanently orphaned (not merely path-filtered) and, if it recurs, have the repo owner | ||
| **SARIF / code-scanning orphan checks, CodeQL only (legacy, pre-2026-09):** `codeql.yml` and | ||
| `dependency-review.yml` were deleted fleet-wide (2026-09; `actions/dependency-review-action` now | ||
| requires paid GitHub Advanced Security). A "CodeQL" or "Code scanning results / CodeQL" check | ||
| visible on a new PR is therefore a leftover from before the deletion, not a live analysis: treat | ||
| it as permanently orphaned (not merely path-filtered) and, if it recurs, have the repo owner | ||
|
Comment on lines
+1625
to
+1627
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- reviewed guidance ---'
sed -n '1608,1672p' plugins/wff-code/skills/pr-review/workflows/pr-fix.md
printf '%s\n' '--- related auditor guidance ---'
sed -n '350,382p' plugins/wff-code/agents/ossf-compliance-auditor.md
printf '%s\n' '--- nearby workflow/check-source references ---'
rg -n -C 3 'CodeQL|default setup|dependency-review|mergeable|mergeStateStatus|required.context|required check' \
plugins/wff-code/skills/pr-review plugins/wff-code/agents/ossf-compliance-auditor.mdRepository: ByronWilliamsCPA/plugin Length of output: 44727 🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- changed lines and local contract ---'
git diff --unified=12 -- plugins/wff-code/skills/pr-review/workflows/pr-fix.md
printf '%s\n' '--- all local instructions for orphaned CodeQL classification ---'
rg -n -C 6 'orphan|retired|permanently|Code scanning results|SARIF|GHAS|Advanced Security|default setup' \
plugins/wff-code/skills/pr-review/workflows/pr-fix.md \
plugins/wff-code/agents/ossf-compliance-auditor.mdRepository: ByronWilliamsCPA/plugin Length of output: 30574 🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- reviewed guidance ---'
sed -n '1608,1672p' plugins/wff-code/skills/pr-review/workflows/pr-fix.md
printf '%s\n' '--- related auditor guidance ---'
sed -n '350,382p' plugins/wff-code/agents/ossf-compliance-auditor.md
printf '%s\n' '--- changed hunks ---'
git diff --unified=12 -- plugins/wff-code/skills/pr-review/workflows/pr-fix.mdRepository: ByronWilliamsCPA/plugin Length of output: 7065 🏁 Script executed: #!/bin/bash
set -eu
sed -n '1608,1672p' plugins/wff-code/skills/pr-review/workflows/pr-fix.md
printf '\n--- auditor ---\n'
sed -n '350,382p' plugins/wff-code/agents/ossf-compliance-auditor.md
printf '\n--- diff ---\n'
git diff --unified=12 -- plugins/wff-code/skills/pr-review/workflows/pr-fix.mdRepository: ByronWilliamsCPA/plugin Length of output: 7015 Make CodeQL orphan classification conditional on its source and GHAS entitlement. A 🧰 Tools🪛 LanguageTool[style] ~1625-~1625: The double modal “requires paid” is nonstandard (only accepted in certain dialects). Consider “to be paid”. (NEEDS_FIXED) 🤖 Prompt for AI Agents |
||
| disable "Code scanning: Default setup" in repo Settings > Code security so GitHub stops | ||
| registering the check context. The pre-2026-09 mechanics below (queued indefinitely because the | ||
| upstream analysis job was path-filtered or skipped on config-only/docs-only PRs) still apply to | ||
| any other SARIF-producing workflow, such as a Trivy or Snyk scan that guards a path filter. | ||
| registering the check context. This does NOT apply to other SARIF-producing workflows: `sbom.yml` | ||
| still runs `github/codeql-action/upload-sarif` for its Grype and OSV-Scanner jobs (categories | ||
| `grype-runtime-deps`, `osv-sbom-runtime-deps`), so those checks are live, not orphaned. The | ||
| pre-2026-09 mechanics below (queued indefinitely because the upstream analysis job was | ||
| path-filtered or skipped on config-only/docs-only PRs) still apply to those and to any other | ||
| SARIF-producing workflow, such as a Trivy or Snyk scan that guards a path filter. | ||
|
|
||
| ```bash | ||
| gh pr view "$PR_NUMBER" --repo "$OWNER/$REPO" --json mergeable,mergeStateStatus \ | ||
| --jq '{mergeable:.mergeable, state:.mergeStateStatus}' | ||
| ``` | ||
|
|
||
| If `mergeable: MERGEABLE` (button is active), these orphaned SARIF checks are non-blocking | ||
| advisory checks, not CI failures. Classify them as "advisory pending (path-filtered upstream | ||
| job)" and do NOT trigger a re-fix cycle. The PR is safe to merge. | ||
| If `mergeable: MERGEABLE` (button is active), a queued (not orphaned-CodeQL) SARIF check is a | ||
| non-blocking advisory check, not a CI failure. Classify it as "advisory pending (path-filtered | ||
| upstream job)" and do NOT trigger a re-fix cycle. The PR is safe to merge. | ||
|
Comment on lines
+1641
to
+1643
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: sed -n '1600,1675p' plugins/wff-code/skills/pr-review/workflows/pr-fix.md
printf '\n--- related identifiers ---\n'
rg -n -C 3 'mergeable|mergeStateStatus|required-context|SARIF checks queued|advisory pending|orphaned-CodeQL' plugins/wff-code/skills/pr-review/workflows/pr-fix.mdRepository: ByronWilliamsCPA/plugin Length of output: 12748 🏁 Script executed: sed -n '330,385p' plugins/wff-code/skills/pr-review/workflows/pr-fix.md
printf '\n--- required-context references ---\n'
rg -n -C 5 'required.?status|required.?context|status.?contexts|ruleset|mergeStateStatus|mergeable_state' plugins/wff-code/skills/pr-review/workflows/pr-fix.mdRepository: ByronWilliamsCPA/plugin Length of output: 14535 🌐 Web query:
💡 Result: In the GitHub REST API, the pull request object provides several fields to determine if and why a pull request can be merged [1][2]. These fields serve different purposes: 1. mergeable: A boolean or null value indicating whether the pull request can be automatically merged [1]. If null, GitHub is still computing the mergeability in the background [1][3]. 2. mergeable_state: A string representing the general mergeability state [1][2]. Common values include 'MERGEABLE', 'CONFLICTING', and 'UNKNOWN' [4][5]. 3. mergeStateStatus: While often requested alongside REST API data, this is an enum primarily exposed via the GitHub GraphQL API that provides detailed status information regarding the mergeability [6][7][8][9]. Detailed Status Information The mergeStateStatus field (and often the underlying data behind mergeable_state) provides granular reasons for the current merge status, such as [7][8][4]: CLEAN: Mergeable and passing all commit statuses [7][8][4]. BLOCKED: The merge is blocked (often due to required status checks or other branch protection rules) [7][8][4]. BEHIND: The head branch is out of date with the base branch [7][8][4]. DIRTY: The merge commit cannot be cleanly created due to conflicts [7][8][4]. UNSTABLE: Mergeable, but has non-passing commit status checks [7][8][4]. HAS_HOOKS: Mergeable with passing status checks and pre-receive hooks [7][8][4]. For technical implementations, it is important to note that mergeable and mergeable_state are returned directly in the REST API pull request response [1][2]. If you require the specific, detailed mergeStateStatus for logic involving required status checks or branch protection, you may need to query the GraphQL API's pullRequest object [9]. When working with these fields, always verify if the value is null (indicating a pending background calculation) before relying on the status [1][3]. Citations:
🌐 Web query:
💡 Result: In the GitHub GraphQL API, the PullRequest object provides specific fields to help determine if a pull request is ready to be merged, specifically through the mergeable and mergeStateStatus fields [1][2]. The mergeable field returns a MergeableState enum indicating whether the pull request can be merged based solely on the existence of merge conflicts [1][2]. The mergeStateStatus field provides more granular detail about the current state of the pull request merge, using the MergeStateStatus enum [1][2]. The statuses you mentioned have the following definitions: BLOCKED: The merge is currently blocked, which often occurs if required status checks have not yet passed, if the pull request has not been approved, or if the pull request is a draft [1][3][2]. UNSTABLE: The pull request is considered mergeable (i.e., it has no merge conflicts), but it currently has non-passing commit statuses or check runs [1][2]. To manage required status checks, you can inspect the BranchProtection rules for a repository, which define which contexts or checks must pass before a branch can accept changes [4]. While mergeStateStatus identifies that a pull request is in an UNSTABLE or BLOCKED state, the underlying cause is often linked to whether the required status checks defined in the branch protection rules have been fulfilled [4]. Citations:
Check required contexts before classifying queued SARIF checks as advisory.
🤖 Prompt for AI Agents |
||
|
|
||
| Classify the outcome: | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 33696
🌐 Web query:
site:docs.github.com dependency review action public repositories private repositories GitHub Code Security Advanced Security licensing💡 Result:
The GitHub dependency review action is a tool used to scan pull requests for dependency changes, alerting users to security vulnerabilities and license issues before they are merged [1][2][3]. Its availability and licensing requirements depend on the repository's visibility and security configuration [1][4]. Public Repositories The dependency review action is available for all public repositories on GitHub.com free of charge [5][4]. It is enabled by default for these repositories as part of GitHub's commitment to supply chain security [5][4]. Private Repositories For private repositories, the dependency review action is not free [4]. It requires that the repository has either GitHub Code Security or GitHub Advanced Security enabled [1][6][3]. If a repository is changed from public to private visibility, dependency review features will be disabled unless the required licensing for GitHub Advanced Security is in place [4]. Configuration and Licensing Features The action allows for significant customization to align with organizational policies [1][2]. Key configuration capabilities include: - Vulnerability Management: You can configure the action to fail a build based on the severity level of detected vulnerabilities (e.g., critical, high, moderate, low) [2][7]. - License Compliance: The action supports the use of allow-lists or deny-lists to enforce license policies, enabling teams to block dependencies that use incompatible or undesired licenses [2][7]. If you are using GitHub Team or GitHub Enterprise plans, you can manage and enforce these security requirements across your organization using repository rulesets to ensure that the dependency review action passes before a pull request can be merged [8][9].
Citations:
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 32353
🌐 Web query:
official GitHub dependency review action public repositories private repositories GitHub Code Security availability💡 Result:
The GitHub Dependency Review action is available for all public repositories on GitHub.com [1][2][3]. For private repositories, the action is available provided the repository or organization has GitHub Advanced Security (GHAS) or GitHub Code Security enabled [1][2][3]. Key availability and requirements: - Public Repositories: Available to all [4][3]. - Private Repositories: Requires a license for GitHub Advanced Security or GitHub Code Security [1][3]. If GHAS is not enabled for a private repository, attempts to use the dependency review API (which the action relies on) will result in a 403 error [5]. - GitHub Enterprise Server: The action is supported, but may require additional configuration (such as using an external-repo-token for accessing configuration files) [4][6]. - Enforcement: Organization owners can enforce the use of this action across repositories using repository rulesets and required workflows [2].
Citations:
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 5009
Scope the
actions/dependency-review-actionavailability claim.Public repositories can use the action without paid GitHub Code Security. Private repositories require GitHub Code Security or GitHub Advanced Security. Keep the fleet-removal statement separate from this repository-visibility rule. Update the rebuild source and regenerate both artifacts:
plugins/wff-chat/skills/ci-fix/SKILL.mdplugins/wff-code/skills/ci-fix/SKILL.md🧰 Tools
🪛 LanguageTool
[style] ~191-~191: The double modal “requires paid” is nonstandard (only accepted in certain dialects). Consider “to be paid”.
Context: ...wide (2026-09): the action now requires paid GitHub Advanced Security (Code Security...
(NEEDS_FIXED)
🪛 SkillSpector (2.9.5)
[warning] 248: [RP1] null: npx commands without a version suffix (e.g.
@1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Remediation: Pin the version: npx
@scope/server@1.2.3(MCP Rug Pull (RP1))
[warning] 245: [RP1] null: uvx/uv tool run commands without ==version create a rug-pull risk.
Remediation: Pin the version: uvx package-name==1.2.3
(MCP Rug Pull (RP1))
📍 Affects 2 files
plugins/wff-chat/skills/ci-fix/SKILL.md#L191-L191(this comment)plugins/wff-code/skills/ci-fix/SKILL.md#L191-L191🤖 Prompt for AI Agents
Source: MCP tools
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 9376
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 50382
🌐 Web query:
"fail-on-forbidden-licenses" "sbom.yml" Trivy GitHub Actions💡 Result:
To configure license enforcement in a Trivy scan within a GitHub Actions workflow, you must understand that there is no single parameter named exactly fail-on-forbidden-licenses [1]. Instead, license compliance is managed by defining forbidden licenses in a configuration file and ensuring the Trivy execution is configured to exit with a non-zero code when policy violations are detected [2][3]. To enforce forbidden licenses: 1. Create a Trivy configuration file (e.g., trivy.yaml) that defines your forbidden licenses [2][3]. license: forbidden: - AGPL-3.0 - GPL-3.0 2. In your GitHub Actions workflow file (e.g., sbom.yml), pass the path to this configuration file using the --config flag, and ensure you use --exit-code 1 (or another non-zero value) to force the action to fail upon detecting a violation [4][3]. - name: Run Trivy scan uses: aquasecurity/trivy-action@master with: scan-type: 'sbom' format: 'table' exit-code: '1' args: '--config trivy.yaml' Note that while some users may attempt to use environment variables or custom flags like fail-on-forbidden-licenses in wrapper scripts or reusable workflows, the standard Trivy CLI handles license enforcement through the combination of a configuration file and the --exit-code flag [2][4][3]. Ensure that your scanner configuration includes license by checking your --scanners setting [4]. If you are using a reusable workflow, confirm that it supports passing these specific arguments to the underlying Trivy execution [1].
Citations:
🌐 Web query:
site:github.com/ByronWilliamsCPA/fragrance-rater ".github/workflows/sbom.yml" "fail-on-forbidden-licenses"💡 Result:
The setting fail-on-forbidden-licenses is an input parameter used within custom or organization-level reusable GitHub Actions workflows to control whether a workflow execution should fail if any dependencies are found to have prohibited software licenses [1]. It is not a native parameter of standard, publicly available GitHub Actions (such as the base aquasecurity/trivy-action). Instead, it appears in private or organization-specific reusable workflows—often those that wrap security tools like Trivy—to provide a centralized way to enforce license compliance policies [1]. In workflows where this input is defined, it is typically used as a boolean flag: - Setting fail-on-forbidden-licenses: true will cause the workflow to return a non-zero exit code (failing the job) if license policy violations are detected [1]. - Setting fail-on-forbidden-licenses: false allows the workflow to complete even if forbidden licenses are found, which is often used during initial configuration or when audit-only logging is desired [1]. If you are encountering this parameter in a repository, you should check the definition of the reusable workflow being called (specified in the uses key in your.github/workflows/sbom.yml file) to understand how the underlying script processes this input and what specific list of licenses it considers forbidden [1].
Citations:
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 223
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 2113
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 16885
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 5759
🏁 Script executed:
Repository: ByronWilliamsCPA/plugin
Length of output: 9048
Align both
ci-fixdocuments with the pinned SBOM caller.The caller also triggers on
.github/workflows/sbom.ymlchanges, limits pushes tomain,master, anddevelop, and supports scheduled and manual runs. Thefail-on-forbidden-licenses: falsesetting is correct for advisory license findings. Update the rebuild source and regenerate both documents:plugins/wff-chat/skills/ci-fix/SKILL.md#L191-L191plugins/wff-code/skills/ci-fix/SKILL.md#L191-L191🧰 Tools
🪛 LanguageTool
[style] ~191-~191: The double modal “requires paid” is nonstandard (only accepted in certain dialects). Consider “to be paid”.
Context: ...wide (2026-09): the action now requires paid GitHub Advanced Security (Code Security...
(NEEDS_FIXED)
🪛 SkillSpector (2.9.5)
[warning] 248: [RP1] null: npx commands without a version suffix (e.g.
@1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Remediation: Pin the version: npx
@scope/server@1.2.3(MCP Rug Pull (RP1))
[warning] 245: [RP1] null: uvx/uv tool run commands without ==version create a rug-pull risk.
Remediation: Pin the version: uvx package-name==1.2.3
(MCP Rug Pull (RP1))
📍 Affects 2 files
plugins/wff-chat/skills/ci-fix/SKILL.md#L191-L191(this comment)plugins/wff-code/skills/ci-fix/SKILL.md#L191-L191🤖 Prompt for AI Agents