AC Code Validator Validate code against quality standards and style guidelines. Purpose Performs static analysis, linting, type checking, and style validation to ensure code meets quality standards before integration. Quick Start Validation Types Linting Type Checking Formatting Security Scan Validation Result Configuration Auto-Fix Support Language Support | Language | Lint | Types | Format | Security | |----------|------|-------|--------|----------| | Python | ruff/flake8 | mypy | black | bandit | | TypeScript | eslint | tsc | prettier | npm audit | | JavaScript | eslint | - | prettier | np…

, result.stderr, re.MULTILINE)\n\n if needs_format:\n issues = [\n ValidationIssue(\n file=f,\n line=0,\n severity=\"warning\",\n message=\"File needs formatting\",\n auto_fixable=True\n )\n for f in needs_format\n ]\n return CheckResult(\n passed=False,\n warnings=len(issues),\n issues=issues\n )\n\n return CheckResult(passed=True)\n\n except (subprocess.TimeoutExpired, FileNotFoundError):\n return CheckResult(passed=True)\n\n async def run_security_scan(self, paths: Optional[List[str]] = None) -> CheckResult:\n \"\"\"Run security vulnerability scan.\"\"\"\n tool = self.config.tools.get(\"security\", \"bandit\")\n\n try:\n if tool == \"bandit\":\n result = subprocess.run(\n [\"bandit\", \"-r\", \"-f\", \"json\", \".\"],\n cwd=self.project_dir,\n capture_output=True,\n text=True,\n timeout=120\n )\n\n issues = self._parse_bandit_output(result.stdout)\n\n else:\n issues = []\n\n errors = len([i for i in issues if i.severity == \"error\"])\n\n return CheckResult(\n passed=errors == 0,\n errors=errors,\n issues=issues\n )\n\n except (subprocess.TimeoutExpired, FileNotFoundError):\n return CheckResult(passed=True)\n\n async def auto_fix(\n self,\n types: Optional[List[str]] = None\n ) -> Dict[str, bool]:\n \"\"\"\n Auto-fix issues.\n\n Args:\n types: Types to fix (default: all)\n\n Returns:\n Dict of type -> success\n \"\"\"\n types = types or [\"format\", \"lint\"]\n results = {}\n\n if \"format\" in types:\n results[\"format\"] = await self._fix_formatting()\n\n if \"lint\" in types:\n results[\"lint\"] = await self._fix_lint()\n\n return results\n\n async def _fix_formatting(self) -> bool:\n \"\"\"Fix formatting issues.\"\"\"\n tool = self.config.tools.get(\"format\", \"black\")\n\n try:\n if tool == \"black\":\n result = subprocess.run(\n [\"black\", \".\"],\n cwd=self.project_dir,\n capture_output=True,\n timeout=60\n )\n return result.returncode == 0\n\n except (subprocess.TimeoutExpired, FileNotFoundError):\n pass\n\n return False\n\n async def _fix_lint(self) -> bool:\n \"\"\"Fix linting issues.\"\"\"\n tool = self.config.tools.get(\"lint\", \"ruff\")\n\n try:\n if tool == \"ruff\":\n result = subprocess.run(\n [\"ruff\", \"check\", \"--fix\", \".\"],\n cwd=self.project_dir,\n capture_output=True,\n timeout=60\n )\n return result.returncode == 0\n\n except (subprocess.TimeoutExpired, FileNotFoundError):\n pass\n\n return False\n\n def _parse_ruff_output(self, output: str) -> List[ValidationIssue]:\n \"\"\"Parse Ruff JSON output.\"\"\"\n issues = []\n\n try:\n data = json.loads(output) if output.strip() else []\n for item in data:\n issues.append(ValidationIssue(\n file=item.get(\"filename\", \"\"),\n line=item.get(\"location\", {}).get(\"row\", 0),\n column=item.get(\"location\", {}).get(\"column\", 0),\n severity=\"warning\" if item.get(\"code\", \"\").startswith(\"W\") else \"error\",\n message=item.get(\"message\", \"\"),\n rule=item.get(\"code\", \"\"),\n auto_fixable=item.get(\"fix\") is not None\n ))\n except json.JSONDecodeError:\n # Parse text output\n for line in output.split('\\n'):\n match = re.match(r'^(.+):(\\d+):(\\d+): (\\w+) (.+)

AC Code Validator Validate code against quality standards and style guidelines. Purpose Performs static analysis, linting, type checking, and style validation to ensure code meets quality standards before integration. Quick Start Validation Types Linting Type Checking Formatting Security Scan Validation Result Configuration Auto-Fix Support Language Support | Language | Lint | Types | Format | Security | |----------|------|-------|--------|----------| | Python | ruff/flake8 | mypy | black | bandit | | TypeScript | eslint | tsc | prettier | npm audit | | JavaScript | eslint | - | prettier | np…

, line)\n if match:\n issues.append(ValidationIssue(\n file=match.group(1),\n line=int(match.group(2)),\n column=int(match.group(3)),\n severity=\"warning\",\n message=match.group(5),\n rule=match.group(4)\n ))\n\n return issues\n\n def _parse_flake8_output(self, output: str) -> List[ValidationIssue]:\n \"\"\"Parse Flake8 output.\"\"\"\n issues = []\n\n for line in output.split('\\n'):\n match = re.match(r'^(.+):(\\d+):(\\d+): (\\w+) (.+)

AC Code Validator Validate code against quality standards and style guidelines. Purpose Performs static analysis, linting, type checking, and style validation to ensure code meets quality standards before integration. Quick Start Validation Types Linting Type Checking Formatting Security Scan Validation Result Configuration Auto-Fix Support Language Support | Language | Lint | Types | Format | Security | |----------|------|-------|--------|----------| | Python | ruff/flake8 | mypy | black | bandit | | TypeScript | eslint | tsc | prettier | npm audit | | JavaScript | eslint | - | prettier | np…

, line)\n if match:\n issues.append(ValidationIssue(\n file=match.group(1),\n line=int(match.group(2)),\n column=int(match.group(3)),\n severity=\"error\" if match.group(4).startswith(\"E\") else \"warning\",\n message=match.group(5),\n rule=match.group(4)\n ))\n\n return issues\n\n def _parse_mypy_output(self, output: str) -> List[ValidationIssue]:\n \"\"\"Parse mypy output.\"\"\"\n issues = []\n\n for line in output.split('\\n'):\n match = re.match(r'^(.+):(\\d+): (error|warning): (.+)

AC Code Validator Validate code against quality standards and style guidelines. Purpose Performs static analysis, linting, type checking, and style validation to ensure code meets quality standards before integration. Quick Start Validation Types Linting Type Checking Formatting Security Scan Validation Result Configuration Auto-Fix Support Language Support | Language | Lint | Types | Format | Security | |----------|------|-------|--------|----------| | Python | ruff/flake8 | mypy | black | bandit | | TypeScript | eslint | tsc | prettier | npm audit | | JavaScript | eslint | - | prettier | np…

, line)\n if match:\n issues.append(ValidationIssue(\n file=match.group(1),\n line=int(match.group(2)),\n severity=match.group(3),\n message=match.group(4)\n ))\n\n return issues\n\n def _parse_bandit_output(self, output: str) -> List[ValidationIssue]:\n \"\"\"Parse Bandit JSON output.\"\"\"\n issues = []\n\n try:\n data = json.loads(output) if output.strip() else {\"results\": []}\n for result in data.get(\"results\", []):\n severity_map = {\"HIGH\": \"error\", \"MEDIUM\": \"warning\", \"LOW\": \"info\"}\n issues.append(ValidationIssue(\n file=result.get(\"filename\", \"\"),\n line=result.get(\"line_number\", 0),\n severity=severity_map.get(result.get(\"issue_severity\", \"\"), \"warning\"),\n message=result.get(\"issue_text\", \"\"),\n rule=result.get(\"test_id\", \"\")\n ))\n except json.JSONDecodeError:\n pass\n\n return issues\n\n\n# Convenience function\nasync def validate_code(project_dir: Path) -> ValidationResult:\n \"\"\"Validate code in project.\"\"\"\n validator = CodeValidator(project_dir)\n return await validator.validate()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":13611,"content_sha256":"b701994472d46bc6c2fdabdf0a4a86e4417f02e534906d255afd95f05bbb5b60"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"AC Code Validator","type":"text"}]},{"type":"paragraph","content":[{"text":"Validate code against quality standards and style guidelines.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Purpose","type":"text"}]},{"type":"paragraph","content":[{"text":"Performs static analysis, linting, type checking, and style validation to ensure code meets quality standards before integration.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quick Start","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"from scripts.code_validator import CodeValidator\n\nvalidator = CodeValidator(project_dir)\nresult = await validator.validate()","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Validation Types","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Linting","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"lint_result = await validator.run_lint()\n# ESLint for JS/TS\n# Ruff/Flake8 for Python\n# golint for Go","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Type Checking","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"type_result = await validator.run_type_check()\n# TypeScript compiler\n# mypy for Python","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Formatting","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"format_result = await validator.check_formatting()\n# Prettier for JS/TS\n# Black for Python","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Security Scan","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"security_result = await validator.run_security_scan()\n# Bandit for Python\n# npm audit for Node.js","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Validation Result","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"valid\": true,\n \"checks\": {\n \"lint\": {\n \"passed\": true,\n \"errors\": 0,\n \"warnings\": 3,\n \"issues\": [\n {\"file\": \"auth.py\", \"line\": 45, \"severity\": \"warning\", \"message\": \"Line too long\"}\n ]\n },\n \"types\": {\n \"passed\": true,\n \"errors\": 0\n },\n \"format\": {\n \"passed\": false,\n \"files_needing_format\": [\"utils.py\"]\n },\n \"security\": {\n \"passed\": true,\n \"vulnerabilities\": []\n }\n },\n \"summary\": {\n \"total_issues\": 3,\n \"blocking\": 0,\n \"auto_fixable\": 3\n }\n}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Configuration","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"language\": \"python\",\n \"tools\": {\n \"lint\": \"ruff\",\n \"format\": \"black\",\n \"types\": \"mypy\",\n \"security\": \"bandit\"\n },\n \"rules\": {\n \"max_line_length\": 100,\n \"max_complexity\": 10,\n \"require_docstrings\": true\n },\n \"ignore_patterns\": [\n \"**/__pycache__/**\",\n \"**/node_modules/**\",\n \"**/.venv/**\"\n ]\n}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Auto-Fix Support","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"# Fix all auto-fixable issues\nfix_result = await validator.auto_fix()\n\n# Fix specific types only\nawait validator.auto_fix(types=[\"format\", \"lint\"])","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Language Support","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Language","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Lint","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Types","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Format","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Security","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"ruff/flake8","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"mypy","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"black","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"bandit","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TypeScript","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"eslint","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"tsc","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"prettier","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"npm audit","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JavaScript","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"eslint","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"-","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"prettier","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"npm audit","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Go","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"golint","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"go vet","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"gofmt","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"gosec","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Integration","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Used by: ","type":"text"},{"text":"ac-qa-reviewer","type":"text","marks":[{"type":"code_inline"}]},{"text":" for quality checks","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Used by: ","type":"text"},{"text":"ac-commit-manager","type":"text","marks":[{"type":"code_inline"}]},{"text":" before commits","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Reports to: ","type":"text"},{"text":"ac-task-executor","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"API Reference","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"See ","type":"text"},{"text":"scripts/code_validator.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" for full implementation.","type":"text"}]}]},"metadata":{"date":"2026-06-05","name":"ac-code-validator","author":"@skillopedia","source":{"stars":11,"repo_name":"skrillz","origin_url":"https://github.com/adaptationio/skrillz/blob/HEAD/skills/ac-code-validator/SKILL.md","repo_owner":"adaptationio","body_sha256":"3a642ab13dbbd5b78e036762e2d4324b56b003878e0a613adaf1b0d097da6123","cluster_key":"c920fe9181a2306d962ddba6a0bb5981ab6dbca7f9048ef5a2bd8ba8158d9fe5","clean_bundle":{"format":"clean-skill-bundle-v1","source":"adaptationio/skrillz/skills/ac-code-validator/SKILL.md","attachments":[{"id":"7f47c81b-bdb3-5738-b00a-79f9206243da","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7f47c81b-bdb3-5738-b00a-79f9206243da/attachment.py","path":"scripts/code_validator.py","size":13611,"sha256":"b701994472d46bc6c2fdabdf0a4a86e4417f02e534906d255afd95f05bbb5b60","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"f4ab083f0c9d683c32a6d54503075c669dcd09d64eae5d66e29df751d395a7a7","attachment_count":1,"text_attachments":1,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":2,"skill_md_path":"skills/ac-code-validator/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"software-engineering","category_label":"Engineering"},"exact_dupes_collapsed_into_this":1},"version":"v1","category":"software-engineering","import_tag":"clean-skills-v1","description":"Validate code quality and standards. Use when running linting, checking types, validating code style, or performing static analysis."}},"renderedAt":1782986210818}

AC Code Validator Validate code against quality standards and style guidelines. Purpose Performs static analysis, linting, type checking, and style validation to ensure code meets quality standards before integration. Quick Start Validation Types Linting Type Checking Formatting Security Scan Validation Result Configuration Auto-Fix Support Language Support | Language | Lint | Types | Format | Security | |----------|------|-------|--------|----------| | Python | ruff/flake8 | mypy | black | bandit | | TypeScript | eslint | tsc | prettier | npm audit | | JavaScript | eslint | - | prettier | np…