From c158310a4265abc98f40ffd21360d611f1900f34 Mon Sep 17 00:00:00 2001 From: Aleksandr Lozhkovoi Date: Sat, 21 Feb 2026 22:30:26 +0100 Subject: [PATCH 1/3] feat: standardize agent/skill outputs and add validation runner --- .cursor-plugin/plugin.json | 2 +- CHANGELOG.md | 4 ++ agents/flutter-app-builder.md | 7 ++++ agents/flutter-code-reviewer.md | 7 ++++ agents/flutter-mobile-release-manager.md | 7 ++++ agents/flutter-test-writer.md | 7 ++++ plugin.json | 2 +- scripts/validate_agents_skills.sh | 42 +++++++++++++++++++ skills/build-flutter-features/SKILL.md | 7 ++++ skills/integrate-firebase/SKILL.md | 7 ++++ skills/migrate-flutter-code/SKILL.md | 7 ++++ skills/release-mobile-apps/SKILL.md | 13 ++++++ skills/scaffold-flutter-architecture/SKILL.md | 13 ++++++ .../sync-official-flutter-ai-rules/SKILL.md | 7 ++++ skills/write-flutter-tests/SKILL.md | 13 ++++++ 15 files changed, 143 insertions(+), 2 deletions(-) create mode 100755 scripts/validate_agents_skills.sh diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index dd70a43..dc51361 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "flutter-cursor-plugin", "displayName": "Flutter Cursor Plugin", - "version": "1.10.2", + "version": "1.10.3", "description": "Open-source Cursor plugin for end-to-end Flutter development and testing with Dart MCP, Figma MCP, practical architecture patterns, and reliable test workflows.", "author": { "name": "Aleksandr Lozhkovoi", diff --git a/CHANGELOG.md b/CHANGELOG.md index 364542e..a1dce1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +- Added output expectations to all agents and standardized required output sections across all skills. +- Added validation script for agent/skill prompt quality: + - `scripts/validate_agents_skills.sh` +- Verified prompt test matrix for all agents/skills (26 checks, all passing). - Hardened command prompts with shared execution guardrails: - `docs/prompt-execution-guardrails.md` - Added deterministic validation guidance: diff --git a/agents/flutter-app-builder.md b/agents/flutter-app-builder.md index 67b7666..a8d6312 100644 --- a/agents/flutter-app-builder.md +++ b/agents/flutter-app-builder.md @@ -30,3 +30,10 @@ Primary agent for Flutter feature development. - Keep architecture layered (presentation/domain/data boundaries). - Add/update tests proportionally to behavior changes. - Prefer incremental, reviewable changes over large rewrites. + +## Output expectations + +1. Selected route/skill and reason. +2. Scope and files touched. +3. Validation commands and results. +4. Risks or follow-up steps. diff --git a/agents/flutter-code-reviewer.md b/agents/flutter-code-reviewer.md index 193257b..bc4b9a0 100644 --- a/agents/flutter-code-reviewer.md +++ b/agents/flutter-code-reviewer.md @@ -22,3 +22,10 @@ Dedicated agent for code review and conventions. - Missing error handling. - Test gaps and brittle assertions. - Accessibility and localization risks. + +## Output expectations + +1. Findings first, ordered by severity. +2. File references for each finding. +3. Security findings included explicitly. +4. Residual risks/testing gaps summary. diff --git a/agents/flutter-mobile-release-manager.md b/agents/flutter-mobile-release-manager.md index a5bb911..b78d5b5 100644 --- a/agents/flutter-mobile-release-manager.md +++ b/agents/flutter-mobile-release-manager.md @@ -18,3 +18,10 @@ Dedicated agent for mobile app publishing readiness. - Android Play-ready build and signing checks. - iOS App Store-ready archive and signing checks. - Versioning, release notes, privacy declarations, and submission gating. + +## Output expectations + +1. Android readiness status. +2. iOS readiness status. +3. Validation evidence (commands/artifacts/checklists). +4. Blocking issues before submission. diff --git a/agents/flutter-test-writer.md b/agents/flutter-test-writer.md index 2e5f575..fa00561 100644 --- a/agents/flutter-test-writer.md +++ b/agents/flutter-test-writer.md @@ -25,3 +25,10 @@ Main router for Flutter test tasks. - For widget tests, enforce behavior-first assertions (actions, branching, side effects), not synthetic-only attribute checks. - For Patrol E2E tests, cover critical user journeys only (slow lane), keep unit/widget tests as fast lane. - Run only impacted tests before finishing. + +## Output expectations + +1. Test type selected (widget/bloc/integration) and reason. +2. Files changed and template used. +3. Test commands run and pass/fail result. +4. Remaining coverage gaps. diff --git a/plugin.json b/plugin.json index e1c03a0..c623a54 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "name": "flutter-cursor-plugin", "displayName": "Flutter Cursor Plugin", - "version": "1.10.2", + "version": "1.10.3", "description": "Open-source Cursor plugin for end-to-end Flutter development and testing with Dart MCP, Figma MCP, practical architecture patterns, and reliable test workflows.", "author": "Aleksandr Lozhkovoi", "license": "MIT", diff --git a/scripts/validate_agents_skills.sh b/scripts/validate_agents_skills.sh new file mode 100755 index 0000000..0c94cdd --- /dev/null +++ b/scripts/validate_agents_skills.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "${repo_root}" + +pass_count=0 +fail_count=0 + +check() { + local name="$1" + local cmd="$2" + if eval "${cmd}" >/dev/null 2>&1; then + echo "PASS | ${name}" + pass_count=$((pass_count + 1)) + else + echo "FAIL | ${name}" + fail_count=$((fail_count + 1)) + fi +} + +# Agents (4) +check "A1 flutter-app-builder output expectations" "rg -q '^## Output expectations' agents/flutter-app-builder.md" +check "A2 flutter-test-writer output expectations" "rg -q '^## Output expectations' agents/flutter-test-writer.md" +check "A3 flutter-code-reviewer output expectations" "rg -q '^## Output expectations' agents/flutter-code-reviewer.md" +check "A4 flutter-mobile-release-manager output expectations" "rg -q '^## Output expectations' agents/flutter-mobile-release-manager.md" + +# Skills (11) +for skill in skills/*/SKILL.md; do + base="$(basename "$(dirname "${skill}")")" + check "S-${base} has workflow" "rg -q '^## Workflow' '${skill}'" + check "S-${base} has output section" "rg -q '^## (Required output|Output format)' '${skill}'" +done + +total=$((pass_count + fail_count)) +echo +echo "SUMMARY | total=${total} passed=${pass_count} failed=${fail_count}" + +if [ "${fail_count}" -gt 0 ]; then + exit 1 +fi diff --git a/skills/build-flutter-features/SKILL.md b/skills/build-flutter-features/SKILL.md index 00e4eb9..7263760 100644 --- a/skills/build-flutter-features/SKILL.md +++ b/skills/build-flutter-features/SKILL.md @@ -32,6 +32,13 @@ Use this skill for non-test Flutter development tasks. - Restrict changes to the requested feature/module unless explicitly expanded. - Do not mix unrelated refactors with feature delivery. +## Required output + +1. Goal + scope summary. +2. Files changed by layer (presentation/domain/data). +3. Validation commands run and results. +4. Residual risks or follow-up TODOs. + ## Required references - `../../rules/flutter-development-best-practices.mdc` diff --git a/skills/integrate-firebase/SKILL.md b/skills/integrate-firebase/SKILL.md index d89efcb..dfa0d7b 100644 --- a/skills/integrate-firebase/SKILL.md +++ b/skills/integrate-firebase/SKILL.md @@ -29,6 +29,13 @@ Use this skill for end-to-end Firebase integration in Flutter apps. - Add error handling and fallback behavior for remote dependencies. - Validate behavior in both debug and release-capable builds. +## Required output + +1. Enabled Firebase services and where they are wired. +2. Android/iOS configuration files changed. +3. Validation commands run and runtime checks performed. +4. Known gaps or follow-up production steps. + ## Required references - `../../docs/firebase-integration-checklist.md` diff --git a/skills/migrate-flutter-code/SKILL.md b/skills/migrate-flutter-code/SKILL.md index c285a9b..6e11936 100644 --- a/skills/migrate-flutter-code/SKILL.md +++ b/skills/migrate-flutter-code/SKILL.md @@ -21,3 +21,10 @@ Use for framework/API/state-management migrations. - Do not mix unrelated refactors with migration work. - Keep intermediate states buildable when possible. - Prefer codemod-like repetitive edits over ad hoc changes. + +## Required output + +1. Migration target and acceptance criteria. +2. Batch-by-batch changes summary. +3. Validation commands/results per batch. +4. Breaking changes and rollback notes. diff --git a/skills/release-mobile-apps/SKILL.md b/skills/release-mobile-apps/SKILL.md index bd5e52b..1da0e55 100644 --- a/skills/release-mobile-apps/SKILL.md +++ b/skills/release-mobile-apps/SKILL.md @@ -27,6 +27,19 @@ Use this skill for Android/iOS store publishing preparation. 7. Submit and monitor post-release health metrics. 8. If CI pipeline is missing, create it with `commands/setup-mobile-github-pipeline.md` and `templates/github_actions_flutter_mobile_ci.yml`. +## Guardrails + +- Do not mark release ready without artifact build evidence. +- Keep Android/iOS signing and versioning checks explicit. +- Flag missing compliance metadata as blockers, not warnings. + +## Required output + +1. Android readiness status (+ artifact path if built). +2. iOS readiness status (+ artifact/archive status). +3. Validation commands run and outcomes. +4. Blocking gaps before submission. + ## Required references - `../../docs/mobile-app-publishing-checklist.md` diff --git a/skills/scaffold-flutter-architecture/SKILL.md b/skills/scaffold-flutter-architecture/SKILL.md index 71cb381..d20f530 100644 --- a/skills/scaffold-flutter-architecture/SKILL.md +++ b/skills/scaffold-flutter-architecture/SKILL.md @@ -22,3 +22,16 @@ Use for new feature/module boilerplate generation. - Inject dependencies through constructors. - Avoid hidden globals. - Keep files cohesive and naming consistent. + +## Guardrails + +- Keep scaffold minimal and compilable. +- Avoid adding business logic before contracts/interfaces exist. +- Do not generate unused files/classes. + +## Required output + +1. Generated folder tree. +2. Core files created and purpose. +3. Starter tests added. +4. Remaining TODOs to complete feature behavior. diff --git a/skills/sync-official-flutter-ai-rules/SKILL.md b/skills/sync-official-flutter-ai-rules/SKILL.md index 5a0335b..ebb12a4 100644 --- a/skills/sync-official-flutter-ai-rules/SKILL.md +++ b/skills/sync-official-flutter-ai-rules/SKILL.md @@ -29,6 +29,13 @@ Use this workflow to keep plugin guidance aligned with upstream Flutter AI rules - Keep active file `rules/flutter-official-ai-rules.mdc` aligned with chosen profile. - Prefer `4k` unless there is a clear reason to switch to `10k` or `1k`. +## Required output + +1. Selected profile and rationale. +2. Files synced/updated. +3. Diff summary for active rule. +4. Follow-up actions (if manual review is needed). + ## Official upstream sources - `https://raw.githubusercontent.com/flutter/flutter/main/docs/rules/rules_10k.md` diff --git a/skills/write-flutter-tests/SKILL.md b/skills/write-flutter-tests/SKILL.md index 44300de..c08673b 100644 --- a/skills/write-flutter-tests/SKILL.md +++ b/skills/write-flutter-tests/SKILL.md @@ -40,3 +40,16 @@ Use this skill as the single entry point for Flutter test work. - `bloc-tests.md` - `integration-tests.md` - `../../docs/test-environment-setup.md` + +## Guardrails + +- Prefer deterministic tests over time-dependent assertions. +- Keep test setup local unless shared helpers already exist. +- Avoid broad snapshot/golden assertions unless explicitly requested. + +## Required output + +1. Test type selected and why. +2. Files created/updated. +3. Test commands run and results. +4. Flakiness risks or missing coverage notes. From 7d4573d390789eeec69608a43584587455af939d Mon Sep 17 00:00:00 2001 From: Aleksandr Lozhkovoi Date: Sat, 21 Feb 2026 22:36:35 +0100 Subject: [PATCH 2/3] feat: add semantic prompt quality gates --- .cursor-plugin/plugin.json | 2 +- .github/workflows/semantic-quality.yml | 19 +++++ CHANGELOG.md | 5 ++ README.md | 1 + agents/flutter-code-reviewer.md | 3 +- agents/flutter-test-writer.md | 2 +- docs/semantic-quality-gates.md | 21 ++++++ plugin.json | 2 +- scripts/validate_prompt_semantics.sh | 72 +++++++++++++++++++ skills/debug-flutter-issues/SKILL.md | 6 ++ skills/review-flutter-code/SKILL.md | 6 ++ skills/scaffold-flutter-architecture/SKILL.md | 2 +- skills/security-audit/SKILL.md | 6 ++ 13 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/semantic-quality.yml create mode 100644 docs/semantic-quality-gates.md create mode 100755 scripts/validate_prompt_semantics.sh diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index dc51361..9380ce5 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "flutter-cursor-plugin", "displayName": "Flutter Cursor Plugin", - "version": "1.10.3", + "version": "1.10.4", "description": "Open-source Cursor plugin for end-to-end Flutter development and testing with Dart MCP, Figma MCP, practical architecture patterns, and reliable test workflows.", "author": { "name": "Aleksandr Lozhkovoi", diff --git a/.github/workflows/semantic-quality.yml b/.github/workflows/semantic-quality.yml new file mode 100644 index 0000000..71fafb4 --- /dev/null +++ b/.github/workflows/semantic-quality.yml @@ -0,0 +1,19 @@ +name: Semantic Prompt Quality + +on: + pull_request: + push: + branches: [main] + +jobs: + semantic-quality: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate agent/skill structure + run: bash scripts/validate_agents_skills.sh + + - name: Validate prompt semantics + run: bash scripts/validate_prompt_semantics.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index a1dce1f..733cb02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,11 @@ - Added reference example repository for project structure and tests: - https://github.com/Wreos/flutter-cursor-plugin-example - Added pre-release enable guide (`docs/pre-release-enable-plugin.md`) with repository install and manual workspace settings options. +- Added semantic prompt quality gates: + - `scripts/validate_prompt_semantics.sh` + - `.github/workflows/semantic-quality.yml` + - `docs/semantic-quality-gates.md` +- Updated scaffold architecture guidance to prefer existing project state-management convention before selecting a pattern. ## 1.10.0 diff --git a/README.md b/README.md index effc293..b79e318 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ Reference project layout: - **Reference Flutter app layout**: https://github.com/Wreos/flutter-cursor-plugin-example - **Prompt guardrails**: `docs/prompt-execution-guardrails.md`. - **Validation matrix**: `docs/validation-matrix.md`. +- **Semantic quality gates**: `docs/semantic-quality-gates.md`. - **Agents** - `flutter-app-builder` (general Flutter implementation) - `flutter-code-reviewer` diff --git a/agents/flutter-code-reviewer.md b/agents/flutter-code-reviewer.md index bc4b9a0..5932bdd 100644 --- a/agents/flutter-code-reviewer.md +++ b/agents/flutter-code-reviewer.md @@ -28,4 +28,5 @@ Dedicated agent for code review and conventions. 1. Findings first, ordered by severity. 2. File references for each finding. 3. Security findings included explicitly. -4. Residual risks/testing gaps summary. +4. Validation evidence (commands/scans/checks performed). +5. Residual risks/testing gaps summary. diff --git a/agents/flutter-test-writer.md b/agents/flutter-test-writer.md index fa00561..fc3ee41 100644 --- a/agents/flutter-test-writer.md +++ b/agents/flutter-test-writer.md @@ -30,5 +30,5 @@ Main router for Flutter test tasks. 1. Test type selected (widget/bloc/integration) and reason. 2. Files changed and template used. -3. Test commands run and pass/fail result. +3. Validation commands run and pass/fail result. 4. Remaining coverage gaps. diff --git a/docs/semantic-quality-gates.md b/docs/semantic-quality-gates.md new file mode 100644 index 0000000..8569532 --- /dev/null +++ b/docs/semantic-quality-gates.md @@ -0,0 +1,21 @@ +# Semantic Prompt Quality Gates + +This repository validates prompt quality on two levels: + +1. Structural checks (`scripts/validate_agents_skills.sh`): + - required sections exist in agents and skills. +2. Semantic checks (`scripts/validate_prompt_semantics.sh`): + - canonical commands include guardrails and validation references. + - skills include workflow, output contract, and guardrails/scope limits. + - agents require validation evidence in output expectations. + - active Flutter rules remain project-first for state management. + - no blanket prohibition of Riverpod/Bloc/GetX in active rules. + +Run locally: + +```bash +bash scripts/validate_agents_skills.sh +bash scripts/validate_prompt_semantics.sh +``` + +CI runs both checks in `.github/workflows/semantic-quality.yml`. diff --git a/plugin.json b/plugin.json index c623a54..124cd75 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "name": "flutter-cursor-plugin", "displayName": "Flutter Cursor Plugin", - "version": "1.10.3", + "version": "1.10.4", "description": "Open-source Cursor plugin for end-to-end Flutter development and testing with Dart MCP, Figma MCP, practical architecture patterns, and reliable test workflows.", "author": "Aleksandr Lozhkovoi", "license": "MIT", diff --git a/scripts/validate_prompt_semantics.sh b/scripts/validate_prompt_semantics.sh new file mode 100755 index 0000000..5611da0 --- /dev/null +++ b/scripts/validate_prompt_semantics.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "${repo_root}" + +pass_count=0 +fail_count=0 + +check() { + local name="$1" + local cmd="$2" + if eval "${cmd}" >/dev/null 2>&1; then + echo "PASS | ${name}" + pass_count=$((pass_count + 1)) + else + echo "FAIL | ${name}" + fail_count=$((fail_count + 1)) + fi +} + +canonical_commands=( + "commands/implement-flutter-feature.md" + "commands/implement-figma-screen.md" + "commands/generate-flutter-tests.md" + "commands/review-flutter-code.md" + "commands/security-review.md" + "commands/update-flutter-dependencies.md" + "commands/resolve-flutter-build-error.md" + "commands/prepare-mobile-release.md" + "commands/integrate-firebase.md" + "commands/migrate-flutter-code.md" + "commands/scaffold-flutter-feature.md" + "commands/setup-mobile-github-pipeline.md" + "commands/sync-official-flutter-ai-rules.md" + "commands/write-widget-test.md" + "commands/write-bloc-test.md" + "commands/write-e2e-test.md" +) + +for cmd_file in "${canonical_commands[@]}"; do + base="$(basename "${cmd_file}")" + check "C-${base} has guardrails section" "rg -q '^Preconditions and guardrails:' '${cmd_file}'" + check "C-${base} references prompt guardrails doc" "rg -q 'prompt-execution-guardrails\\.md' '${cmd_file}'" + check "C-${base} references validation matrix" "rg -q 'validation-matrix\\.md' '${cmd_file}'" +done + +for skill in skills/*/SKILL.md; do + base="$(basename "$(dirname "${skill}")")" + check "S-${base} has workflow" "rg -q '^## Workflow' '${skill}'" + check "S-${base} has output contract" "rg -q '^## (Required output|Output format)' '${skill}'" + check "S-${base} has guardrails or scope limits" "rg -q '^## (Guardrails|Scope guardrails|Quality defaults)' '${skill}'" +done + +for agent in agents/*.md; do + base="$(basename "${agent}")" + check "A-${base} has output expectations" "rg -q '^## Output expectations' '${agent}'" + check "A-${base} expects validation evidence" "rg -qi '(validation|commands and results|evidence)' '${agent}'" +done + +check "Active Flutter rules are project-first for state management" "rg -q '\\* \\*\\*Project First:\\*\\* Follow the existing project architecture and state-management choice\\.' rules/flutter-official-ai-rules.mdc" +check "Active Flutter rules do not prohibit Riverpod/Bloc/GetX outright" "! rg -q 'Prohibited:\\*\\* NO Riverpod, Bloc, GetX unless explicitly requested\\.' rules/flutter-official-ai-rules.mdc" +check "Scaffold architecture skill enforces project-first state-management selection" "rg -q 'existing project state-management convention' skills/scaffold-flutter-architecture/SKILL.md" + +total=$((pass_count + fail_count)) +echo +echo "SUMMARY | total=${total} passed=${pass_count} failed=${fail_count}" + +if [ "${fail_count}" -gt 0 ]; then + exit 1 +fi diff --git a/skills/debug-flutter-issues/SKILL.md b/skills/debug-flutter-issues/SKILL.md index 0f40f33..2cfc118 100644 --- a/skills/debug-flutter-issues/SKILL.md +++ b/skills/debug-flutter-issues/SKILL.md @@ -19,6 +19,12 @@ Use for compiler/build/runtime failures. 4. Apply smallest deterministic fix. 5. Validate with rerun and impacted tests. +## Guardrails + +- Do not propose a fix without a reproducible command or clear log evidence. +- Keep fixes minimal and limited to the failing layer unless a cross-layer root cause is proven. +- Call out unknowns explicitly instead of guessing when logs are incomplete. + ## Output format - Root cause. diff --git a/skills/review-flutter-code/SKILL.md b/skills/review-flutter-code/SKILL.md index 5523272..d51a34e 100644 --- a/skills/review-flutter-code/SKILL.md +++ b/skills/review-flutter-code/SKILL.md @@ -27,6 +27,12 @@ Use for PR/diff/code review requests. - MASVS-PLATFORM: Android/iOS platform integration risks and exported surfaces. - MASVS-CODE: unsafe code patterns and hardcoded secrets. +## Guardrails + +- Do not provide a deep review without explicit target scope (PR diff, range, or file list). +- Tie each finding to concrete code evidence and expected behavioral impact. +- Keep findings prioritized by severity and user risk, not by style preference. + ## Output format - Findings first, ordered by severity. diff --git a/skills/scaffold-flutter-architecture/SKILL.md b/skills/scaffold-flutter-architecture/SKILL.md index d20f530..75392d2 100644 --- a/skills/scaffold-flutter-architecture/SKILL.md +++ b/skills/scaffold-flutter-architecture/SKILL.md @@ -9,7 +9,7 @@ Use for new feature/module boilerplate generation. ## Workflow -1. Confirm target feature name and selected pattern (BLoC, Riverpod, or clean layered default). +1. Confirm target feature name and existing project state-management convention first (BLoC, Riverpod, Cubit, GetX, ValueNotifier, or clean layered default if none). 2. Create folder structure with presentation/domain/data boundaries. 3. Add state-management entry points (cubit/bloc/provider/notifier). 4. Add repository and data source contracts. diff --git a/skills/security-audit/SKILL.md b/skills/security-audit/SKILL.md index 0a1d290..69955c0 100644 --- a/skills/security-audit/SKILL.md +++ b/skills/security-audit/SKILL.md @@ -39,6 +39,12 @@ Every code review must include this security pass. - MASVS-CODE - MASVS-RESILIENCE (where applicable) +## Guardrails + +- Do not claim scanner coverage that was not actually executed. +- Keep findings actionable by filtering out non-exploitable or low-signal noise. +- If scope is missing, stop and request it before running a full security assessment. + ## Output format - Findings first (highest severity first). From 27f3007a71ef2bb4baef00312bd90c99d6c83f94 Mon Sep 17 00:00:00 2001 From: Aleksandr Lozhkovoi Date: Sat, 21 Feb 2026 22:37:38 +0100 Subject: [PATCH 3/3] fix: install ripgrep for semantic quality checks --- .github/workflows/semantic-quality.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/semantic-quality.yml b/.github/workflows/semantic-quality.yml index 71fafb4..4084e3b 100644 --- a/.github/workflows/semantic-quality.yml +++ b/.github/workflows/semantic-quality.yml @@ -12,6 +12,13 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Ensure ripgrep + run: | + if ! command -v rg >/dev/null 2>&1; then + sudo apt-get update + sudo apt-get install -y ripgrep + fi + - name: Validate agent/skill structure run: bash scripts/validate_agents_skills.sh