From 6d78826a42e10acada25028de72ce4bf16d33de6 Mon Sep 17 00:00:00 2001 From: rsun19 Date: Wed, 18 Mar 2026 15:22:19 -0400 Subject: [PATCH 1/3] add odh-dashboard results --- .../assessment-20260318-191501.json} | 555 ++++-------------- 1 file changed, 127 insertions(+), 428 deletions(-) rename submissions/{dgutride/odh-dashboard/2026-01-28T14-57-54-assessment.json => opendatahub-io/odh-dashboard/assessment-20260318-191501.json} (52%) diff --git a/submissions/dgutride/odh-dashboard/2026-01-28T14-57-54-assessment.json b/submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json similarity index 52% rename from submissions/dgutride/odh-dashboard/2026-01-28T14-57-54-assessment.json rename to submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json index bd59b61a..1627c207 100644 --- a/submissions/dgutride/odh-dashboard/2026-01-28T14-57-54-assessment.json +++ b/submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json @@ -1,38 +1,38 @@ { "schema_version": "1.0.0", "metadata": { - "agentready_version": "2.23.0", + "agentready_version": "2.29.6", "research_version": "1.0.1", - "assessment_timestamp": "2026-01-28T09:55:04.394536", - "assessment_timestamp_human": "January 28, 2026 at 9:55 AM", - "executed_by": "dgutride@dgutride-mac", - "command": "/Users/dgutride/source/odh-dashboard/.venv/bin/agentready assess .", - "working_directory": "/Users/dgutride/source/odh-dashboard" + "assessment_timestamp": "2026-03-18T19:15:01.057439", + "assessment_timestamp_human": "March 18, 2026 at 7:15 PM", + "executed_by": "agentready@498c10df4cf4", + "command": "/usr/local/bin/agentready assess /repo --output-dir /reports -e type_annotations -e precommit_hooks", + "working_directory": "/tmp" }, "repository": { - "path": "/Users/dgutride/source/odh-dashboard", - "name": "odh-dashboard", - "url": "git@github.com:dgutride/odh-dashboard.git", + "path": "/repo", + "name": "repo", + "url": "https://github.com/opendatahub-io/odh-dashboard.git", "branch": "main", - "commit_hash": "7c6e9be28fb749200e0ceb97a631c69d9cbea29e", + "commit_hash": "416f35b0cd58f4177271b1c19f7de745bd0b439a", "languages": { - "YAML": 243, - "JavaScript": 95, - "Markdown": 107, - "JSON": 75, - "TypeScript": 4126, - "Shell": 16, - "Go": 298 + "YAML": 363, + "Markdown": 212, + "JavaScript": 170, + "JSON": 119, + "TypeScript": 4855, + "Shell": 23, + "Go": 703 }, - "total_files": 5212, - "total_lines": 720733 + "total_files": 6841, + "total_lines": 1061957 }, - "timestamp": "2026-01-28T09:55:04.394536", - "overall_score": 42.8, - "certification_level": "Bronze", - "attributes_assessed": 19, - "attributes_not_assessed": 6, - "attributes_total": 25, + "timestamp": "2026-03-18T19:15:01.057439", + "overall_score": 76.5, + "certification_level": "Gold", + "attributes_assessed": 17, + "attributes_skipped": 6, + "attributes_total": 23, "findings": [ { "attribute": { @@ -44,63 +44,16 @@ "criteria": "CLAUDE.md file exists in repository root", "default_weight": 0.1 }, - "status": "fail", - "score": 0.0, - "measured_value": "missing", + "status": "pass", + "score": 100.0, + "measured_value": "present", "threshold": "present", "evidence": [ - "CLAUDE.md not found in repository root", - "AGENTS.md not found (alternative)" + "CLAUDE.md found at /repo/CLAUDE.md", + "Symlink to AGENTS.md (7755 bytes)", + "AGENTS.md also present (cross-tool compatibility)" ], - "remediation": { - "summary": "Create CLAUDE.md or AGENTS.md with project-specific configuration for AI coding assistants", - "steps": [ - "Choose one of three approaches:", - " Option 1: Create standalone CLAUDE.md (>50 bytes) with project context", - " Option 2: Create AGENTS.md and symlink CLAUDE.md to it (cross-tool compatibility)", - " Option 3: Create AGENTS.md and reference it with @AGENTS.md in minimal CLAUDE.md", - "Add project overview and purpose", - "Document key architectural patterns", - "Specify coding standards and conventions", - "Include build/test/deployment commands", - "Add any project-specific context that helps AI assistants" - ], - "tools": [], - "commands": [ - "# Option 1: Standalone CLAUDE.md", - "touch CLAUDE.md", - "# Add content describing your project", - "", - "# Option 2: Symlink CLAUDE.md to AGENTS.md", - "touch AGENTS.md", - "# Add content to AGENTS.md", - "ln -s AGENTS.md CLAUDE.md", - "", - "# Option 3: @ reference in CLAUDE.md", - "echo '@AGENTS.md' > CLAUDE.md", - "touch AGENTS.md", - "# Add content to AGENTS.md" - ], - "examples": [ - "# Standalone CLAUDE.md (Option 1)\n\n## Overview\nBrief description of what this project does.\n\n## Architecture\nKey patterns and structure.\n\n## Development\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n```\n\n## Coding Standards\n- Use TypeScript strict mode\n- Follow ESLint configuration\n- Write tests for new features\n", - "# CLAUDE.md with @ reference (Option 3)\n@AGENTS.md\n", - "# AGENTS.md (shared by multiple tools)\n\n## Project Overview\nThis project implements a REST API for user management.\n\n## Architecture\n- Layered architecture: controllers, services, repositories\n- PostgreSQL database with SQLAlchemy ORM\n- FastAPI web framework\n\n## Development Workflow\n```bash\n# Setup\npython -m venv .venv\nsource .venv/bin/activate\npip install -e .\n\n# Run tests\npytest\n\n# Start server\nuvicorn app.main:app --reload\n```\n\n## Code Conventions\n- Use type hints for all functions\n- Follow PEP 8 style guide\n- Write docstrings for public APIs\n- Maintain >80% test coverage\n" - ], - "citations": [ - { - "source": "Anthropic", - "title": "Claude Code Documentation", - "url": "https://docs.anthropic.com/claude-code", - "relevance": "Official guidance on CLAUDE.md configuration" - }, - { - "source": "agents.md", - "title": "AGENTS.md Specification", - "url": "https://agents.md/", - "relevance": "Emerging standard for cross-tool AI assistant configuration" - } - ] - }, + "remediation": null, "error_message": null }, { @@ -113,100 +66,17 @@ "criteria": "README.md with installation, usage, and development sections", "default_weight": 0.1 }, - "status": "fail", - "score": 66.66666666666666, - "measured_value": "2/3 sections", + "status": "pass", + "score": 100.0, + "measured_value": "3/3 sections", "threshold": "3/3 sections", "evidence": [ - "Found 2/3 essential sections", + "Found 3/3 essential sections", "Installation: \u2713", - "Usage: \u2717", + "Usage: \u2713", "Development: \u2713" ], - "remediation": { - "summary": "Create or enhance README.md with essential sections", - "steps": [ - "Add project overview and description", - "Include installation/setup instructions", - "Document basic usage with examples", - "Add development/contributing guidelines", - "Include build and test commands" - ], - "tools": [], - "commands": [], - "examples": [ - "# Project Name\n\n## Overview\nWhat this project does and why it exists.\n\n## Installation\n```bash\npip install -e .\n```\n\n## Usage\n```bash\nmyproject --help\n```\n\n## Development\n```bash\n# Run tests\npytest\n\n# Format code\nblack .\n```\n" - ], - "citations": [ - { - "source": "GitHub", - "title": "About READMEs", - "url": "https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes", - "relevance": "Best practices for README structure" - } - ] - }, - "error_message": null - }, - { - "attribute": { - "id": "type_annotations", - "name": "Type Annotations", - "category": "Code Quality", - "tier": 1, - "description": "Type hints in function signatures", - "criteria": ">80% of functions have type annotations", - "default_weight": 0.1 - }, - "status": "fail", - "score": 0.0, - "measured_value": "missing tsconfig.json", - "threshold": "strict mode enabled", - "evidence": [ - "tsconfig.json not found" - ], - "remediation": { - "summary": "Add type annotations to function signatures", - "steps": [ - "For Python: Add type hints to function parameters and return types", - "For TypeScript: Enable strict mode in tsconfig.json", - "Use mypy or pyright for Python type checking", - "Use tsc --strict for TypeScript", - "Add type annotations gradually to existing code" - ], - "tools": [ - "mypy", - "pyright", - "typescript" - ], - "commands": [ - "# Python", - "pip install mypy", - "mypy --strict src/", - "", - "# TypeScript", - "npm install --save-dev typescript", - "echo '{\"compilerOptions\": {\"strict\": true}}' > tsconfig.json" - ], - "examples": [ - "# Python - Before\ndef calculate(x, y):\n return x + y\n\n# Python - After\ndef calculate(x: float, y: float) -> float:\n return x + y\n", - "// TypeScript - tsconfig.json\n{\n \"compilerOptions\": {\n \"strict\": true,\n \"noImplicitAny\": true,\n \"strictNullChecks\": true\n }\n}\n" - ], - "citations": [ - { - "source": "Python.org", - "title": "Type Hints", - "url": "https://docs.python.org/3/library/typing.html", - "relevance": "Official Python type hints documentation" - }, - { - "source": "TypeScript", - "title": "TypeScript Handbook", - "url": "https://www.typescriptlang.org/docs/handbook/2/everyday-types.html", - "relevance": "TypeScript type system guide" - } - ] - }, + "remediation": null, "error_message": null }, { @@ -216,7 +86,7 @@ "category": "Repository Structure", "tier": 1, "description": "Follows standard project structure for language", - "criteria": "Standard directories (src/, tests/, docs/) present", + "criteria": "Standard directories (src/ or project-named, tests/) present", "default_weight": 0.1 }, "status": "fail", @@ -225,31 +95,42 @@ "threshold": "2/2 directories", "evidence": [ "Found 0/2 standard directories", - "src/: \u2717", + "source directory: \u2717 (no src/ or project-named dir)", "tests/: \u2717" ], "remediation": { - "summary": "Organize code into standard directories (src/, tests/, docs/)", + "summary": "Organize code into standard directories", "steps": [ - "Create src/ directory for source code", + "Create a source directory for your code", + "Option A: Use src/ layout (recommended for packages)", + "Option B: Use project-named directory (e.g., mypackage/)", + "Ensure your package has __init__.py", "Create tests/ directory for test files", - "Create docs/ directory for documentation", - "Move source code into src/", - "Move tests into tests/" + "Add at least one test file" ], "tools": [], "commands": [ - "mkdir -p src tests docs", - "# Move source files to src/", - "# Move test files to tests/" + "# Option A: src layout", + "mkdir -p src/mypackage", + "touch src/mypackage/__init__.py", + "# ---", + "# Option B: flat layout (project-named)", + "mkdir -p mypackage", + "touch mypackage/__init__.py", + "# Create tests directory", + "mkdir -p tests", + "touch tests/__init__.py", + "touch tests/test_example.py" + ], + "examples": [ + "# src layout (recommended for distributable packages)\nproject/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 mypackage/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 module.py\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 test_module.py\n\u2514\u2500\u2500 pyproject.toml\n\n# flat layout (common in major projects like pandas, numpy)\nproject/\n\u251c\u2500\u2500 mypackage/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 module.py\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 test_module.py\n\u2514\u2500\u2500 pyproject.toml\n" ], - "examples": [], "citations": [ { "source": "Python Packaging Authority", - "title": "Python Project Structure", - "url": "https://packaging.python.org/en/latest/tutorials/packaging-projects/", - "relevance": "Standard Python project layout" + "title": "src layout vs flat layout", + "url": "https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/", + "relevance": "Official guidance on Python project layouts" } ] }, @@ -282,27 +163,28 @@ "category": "Security", "tier": 1, "description": "Security scanning tools configured for dependencies and code", - "criteria": "Dependabot, CodeQL, or SAST tools configured; secret detection enabled", + "criteria": "Dependabot, Renovate, CodeQL, or SAST tools configured; secret detection enabled", "default_weight": 0.04 }, "status": "pass", "score": 35, "measured_value": "Security tools configured: Dependabot", - "threshold": "\u226560 points (Dependabot + SAST or multiple scanners)", + "threshold": "\u226560 points (Dependabot/Renovate + SAST or multiple scanners)", "evidence": [ - "\u2713 Dependabot configured for dependency alerts", + "\u2713 Dependabot configured for dependency updates", " 1 package ecosystem(s) monitored" ], "remediation": { "summary": "Add more security scanning tools for comprehensive coverage", "steps": [ - "Enable Dependabot alerts in GitHub repository settings", + "Enable Dependabot alerts in GitHub repository settings (or configure Renovate: add renovate.json to repository root)", "Add CodeQL scanning workflow for SAST", "Configure secret detection (detect-secrets, gitleaks)", "Set up language-specific scanners (pip-audit, npm audit, Snyk)" ], "tools": [ "Dependabot", + "Renovate", "CodeQL", "detect-secrets", "pip-audit", @@ -348,59 +230,11 @@ "measured_value": null, "threshold": null, "evidence": [ - "Not applicable to ['YAML', 'JavaScript', 'Markdown', 'JSON', 'TypeScript', 'Shell', 'Go']" + "Not applicable to ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" ], "remediation": null, "error_message": null }, - { - "attribute": { - "id": "precommit_hooks", - "name": "Pre-commit Hooks & CI/CD Linting", - "category": "Testing & CI/CD", - "tier": 2, - "description": "Pre-commit hooks configured for linting and formatting", - "criteria": ".pre-commit-config.yaml exists", - "default_weight": 0.03 - }, - "status": "fail", - "score": 0.0, - "measured_value": "not configured", - "threshold": "configured", - "evidence": [ - ".pre-commit-config.yaml not found" - ], - "remediation": { - "summary": "Configure pre-commit hooks for automated code quality checks", - "steps": [ - "Install pre-commit framework", - "Create .pre-commit-config.yaml", - "Add hooks for linting and formatting", - "Install hooks: pre-commit install", - "Run on all files: pre-commit run --all-files" - ], - "tools": [ - "pre-commit" - ], - "commands": [ - "pip install pre-commit", - "pre-commit install", - "pre-commit run --all-files" - ], - "examples": [ - "# .pre-commit-config.yaml\nrepos:\n - repo: https://github.com/pre-commit/pre-commit-hooks\n rev: v4.4.0\n hooks:\n - id: trailing-whitespace\n - id: end-of-file-fixer\n - id: check-yaml\n - id: check-added-large-files\n\n - repo: https://github.com/psf/black\n rev: 23.3.0\n hooks:\n - id: black\n\n - repo: https://github.com/pycqa/isort\n rev: 5.12.0\n hooks:\n - id: isort\n" - ], - "citations": [ - { - "source": "pre-commit.com", - "title": "Pre-commit Framework", - "url": "https://pre-commit.com/", - "relevance": "Official pre-commit documentation" - } - ] - }, - "error_message": null - }, { "attribute": { "id": "conventional_commits", @@ -431,36 +265,16 @@ "criteria": ".gitignore exists and includes language-specific patterns from GitHub templates", "default_weight": 0.03 }, - "status": "fail", - "score": 33.33333333333333, - "measured_value": "5/15 patterns", + "status": "pass", + "score": 86.66666666666667, + "measured_value": "13/15 patterns", "threshold": "\u226570% of language-specific patterns", "evidence": [ - ".gitignore found (324 bytes)", - "Pattern coverage: 5/15 (33%)", - "Missing 10 recommended patterns" + ".gitignore found (917 bytes)", + "Pattern coverage: 13/15 (87%)", + "Missing 2 recommended patterns" ], - "remediation": { - "summary": "Add missing language-specific ignore patterns", - "steps": [ - "Review GitHub's gitignore templates for your language", - "Add the 10 missing patterns", - "Ensure editor/IDE patterns are included" - ], - "tools": [], - "commands": [], - "examples": [ - "# Missing patterns:\n*.tsbuildinfo\n*.swo\n*.exe\n*.out\n*.swp" - ], - "citations": [ - { - "source": "GitHub", - "title": "gitignore Templates Collection", - "url": "https://github.com/github/gitignore", - "relevance": "Comprehensive collection of language-specific gitignore patterns" - } - ] - }, + "remediation": null, "error_message": null }, { @@ -473,54 +287,16 @@ "criteria": "Single command (make setup, npm install, etc.) documented prominently", "default_weight": 0.03 }, - "status": "fail", - "score": 60, - "measured_value": "multi-step setup", + "status": "pass", + "score": 100, + "measured_value": "npm install", "threshold": "single command", "evidence": [ - "No clear setup command found in README", + "Setup command found in README: 'npm install'", "Setup automation found: Makefile, package.json", "Setup instructions in prominent location" ], - "remediation": { - "summary": "Create single-command setup for development environment", - "steps": [ - "Choose setup automation tool (Makefile, setup script, or package manager)", - "Create setup command that handles all dependencies", - "Document setup command prominently in README (Quick Start section)", - "Ensure setup is idempotent (safe to run multiple times)", - "Test setup on fresh clone to verify it works" - ], - "tools": [ - "make", - "npm", - "pip", - "poetry" - ], - "commands": [ - "# Example Makefile", - "cat > Makefile << 'EOF'", - ".PHONY: setup", - "setup:", - "\tpython -m venv venv", - "\t. venv/bin/activate && pip install -r requirements.txt", - "\tpre-commit install", - "\tcp .env.example .env", - "\t@echo 'Setup complete! Run make test to verify.'", - "EOF" - ], - "examples": [ - "# Quick Start section in README\n\n## Quick Start\n\n```bash\nmake setup # One command to set up development environment\nmake test # Run tests to verify setup\n```\n" - ], - "citations": [ - { - "source": "freeCodeCamp", - "title": "Using make for project automation", - "url": "https://www.freecodecamp.org/news/want-to-know-the-easiest-way-to-save-time-use-make/", - "relevance": "Guide to using Makefiles for one-command setup" - } - ] - }, + "remediation": null, "error_message": null }, { @@ -534,12 +310,12 @@ "default_weight": 0.03 }, "status": "fail", - "score": 63.138556883576804, - "measured_value": "31 huge, 104 large out of 4518", + "score": 61.08703250611674, + "measured_value": "51 huge, 152 large out of 5722", "threshold": "<5% files >500 lines, 0 files >1000 lines", "evidence": [ - "Found 31 files >1000 lines (0.7% of 4518 files)", - "Largest: backend/src/types.ts (1327 lines)" + "Found 51 files >1000 lines (0.9% of 5722 files)", + "Largest: backend/src/types.ts (1355 lines)" ], "remediation": { "summary": "Refactor large files into smaller, focused modules", @@ -593,52 +369,16 @@ "criteria": "README <500 lines with clear structure, bullet points over prose", "default_weight": 0.03 }, - "status": "fail", - "score": 61.0, - "measured_value": "28 lines, 3 headings, 2 bullets", + "status": "pass", + "score": 76.0, + "measured_value": "186 lines, 37 headings, 21 bullets", "threshold": "<500 lines, structured format", "evidence": [ - "README length: 28 lines (excellent)", - "Heading density: 10.7 per 100 lines (target: 3-5)", - "Only 2 bullet points (prefer bullets over prose)" + "README length: 186 lines (excellent)", + "Heading density: 19.9 per 100 lines (target: 3-5)", + "21 bullet points, 7 code blocks (concise formatting)" ], - "remediation": { - "summary": "Make documentation more concise and structured", - "steps": [ - "Break long README into multiple documents (docs/ directory)", - "Add clear Markdown headings (##, ###) for structure", - "Convert prose paragraphs to bullet points where possible", - "Add table of contents for documents >100 lines", - "Use code blocks instead of describing commands in prose", - "Move detailed content to wiki or docs/, keep README focused" - ], - "tools": [], - "commands": [ - "# Check README length", - "wc -l README.md", - "", - "# Count headings", - "grep -c '^#' README.md" - ], - "examples": [ - "# Good: Concise with structure\n\n## Quick Start\n```bash\npip install -e .\nagentready assess .\n```\n\n## Features\n- Fast repository scanning\n- HTML and Markdown reports\n- 25 agent-ready attributes\n\n## Documentation\nSee [docs/](docs/) for detailed guides.\n", - "# Bad: Verbose prose\n\nThis project is a tool that helps you assess your repository\nagainst best practices for AI-assisted development. It works by\nscanning your codebase and checking for various attributes that\nmake repositories more effective when working with AI coding\nassistants like Claude Code...\n\n[Many more paragraphs of prose...]\n" - ], - "citations": [ - { - "source": "ArXiv", - "title": "LongCodeBench: Evaluating Coding LLMs at 1M Context Windows", - "url": "https://arxiv.org/abs/2501.00343", - "relevance": "Research showing performance degradation with long contexts" - }, - { - "source": "Markdown Guide", - "title": "Basic Syntax", - "url": "https://www.markdownguide.org/basic-syntax/", - "relevance": "Best practices for Markdown formatting" - } - ] - }, + "remediation": null, "error_message": null }, { @@ -656,7 +396,7 @@ "measured_value": null, "threshold": null, "evidence": [ - "Docstring check not implemented for ['YAML', 'JavaScript', 'Markdown', 'JSON', 'TypeScript', 'Shell', 'Go']" + "Docstring check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" ], "remediation": null, "error_message": null @@ -671,13 +411,24 @@ "criteria": "Average complexity <10, no functions >15", "default_weight": 0.03 }, - "status": "error", + "status": "skipped", "score": null, "measured_value": null, "threshold": null, - "evidence": [], - "remediation": null, - "error_message": "Complexity analysis failed: Command '['lizard', '/Users/dgutride/source/odh-dashboard']' timed out after 60 seconds" + "evidence": [ + "Missing tool: lizard" + ], + "remediation": { + "summary": "Install with: pip install lizard", + "steps": [ + "Install with: pip install lizard" + ], + "tools": [], + "commands": [], + "examples": [], + "citations": [] + }, + "error_message": null }, { "attribute": { @@ -689,70 +440,17 @@ "criteria": "ADR directory with documented decisions", "default_weight": 0.015 }, - "status": "fail", - "score": 0.0, - "measured_value": "no ADR directory", - "threshold": "ADR directory with decisions", + "status": "pass", + "score": 90, + "measured_value": "4 ADRs", + "threshold": "\u22653 ADRs with template", "evidence": [ - "No ADR directory found (checked docs/adr/, .adr/, adr/, docs/decisions/)" + "ADR directory found: docs/adr", + "4 architecture decision records", + "Consistent naming pattern detected", + "Sampled 3 ADRs: template compliance 18/20" ], - "remediation": { - "summary": "Create Architecture Decision Records (ADRs) directory and document key decisions", - "steps": [ - "Create docs/adr/ directory in repository root", - "Use Michael Nygard ADR template or MADR format", - "Document each significant architectural decision", - "Number ADRs sequentially (0001-*.md, 0002-*.md)", - "Include Status, Context, Decision, and Consequences sections", - "Update ADR status when decisions are revised (Superseded, Deprecated)" - ], - "tools": [ - "adr-tools", - "log4brains" - ], - "commands": [ - "# Create ADR directory", - "mkdir -p docs/adr", - "", - "# Create first ADR using template", - "cat > docs/adr/0001-use-architecture-decision-records.md << 'EOF'", - "# 1. Use Architecture Decision Records", - "", - "Date: 2025-11-22", - "", - "## Status", - "Accepted", - "", - "## Context", - "We need to record architectural decisions made in this project.", - "", - "## Decision", - "We will use Architecture Decision Records (ADRs) as described by Michael Nygard.", - "", - "## Consequences", - "- Decisions are documented with context", - "- Future contributors understand rationale", - "- ADRs are lightweight and version-controlled", - "EOF" - ], - "examples": [ - "# Example ADR Structure\n\n```markdown\n# 2. Use PostgreSQL for Database\n\nDate: 2025-11-22\n\n## Status\nAccepted\n\n## Context\nWe need a relational database for complex queries and ACID transactions.\nTeam has PostgreSQL experience. Need full-text search capabilities.\n\n## Decision\nUse PostgreSQL 15+ as primary database.\n\n## Consequences\n- Positive: Robust ACID, full-text search, team familiarity\n- Negative: Higher resource usage than SQLite\n- Neutral: Need to manage migrations, backups\n```\n" - ], - "citations": [ - { - "source": "Michael Nygard", - "title": "Documenting Architecture Decisions", - "url": "https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions", - "relevance": "Original ADR format and rationale" - }, - { - "source": "GitHub adr/madr", - "title": "Markdown ADR (MADR) Template", - "url": "https://github.com/adr/madr", - "relevance": "Modern ADR template with examples" - } - ] - }, + "remediation": null, "error_message": null }, { @@ -791,7 +489,7 @@ "measured_value": "basic config", "threshold": "CI with best practices", "evidence": [ - "CI config found: .github/workflows/release-odh-dashboard.yml, .github/workflows/test.yml, .github/workflows/pr-image-expiry.yml, .github/workflows/stale.yml, .github/workflows/gen-ai-frontend-build.yml, .github/workflows/release-auto-merge.yml, .github/workflows/cypress-e2e-test.yml, .github/workflows/gen-ai-bff-build.yml, .github/workflows/validate-kustomize.yml, .github/workflows/modular-arch-quality-gates.yml", + "CI config found: .github/workflows/release-odh-dashboard.yml, .github/workflows/automl-bff-tests.yml, .github/workflows/eval-hub-bff-tests.yml, .github/workflows/autorag-bff-tests.yml, .github/workflows/eval-hub-frontend-tests.yml, .github/workflows/test.yml, .github/workflows/pr-image-expiry.yml, .github/workflows/stale.yml, .github/workflows/gen-ai-frontend-build.yml, .github/workflows/release-auto-merge.yml, .github/workflows/cypress-e2e-test.yml, .github/workflows/gen-ai-bff-build.yml, .github/workflows/agentready-weekly.yml, .github/workflows/validate-kustomize.yml, .github/workflows/maas-bff-tests.yml, .github/workflows/modular-arch-quality-gates.yml", "Descriptive job/step names found", "No caching detected", "Parallel job execution detected" @@ -855,7 +553,7 @@ "measured_value": null, "threshold": null, "evidence": [ - "Naming check not implemented for ['YAML', 'JavaScript', 'Markdown', 'JSON', 'TypeScript', 'Shell', 'Go']" + "Naming check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" ], "remediation": null, "error_message": null @@ -875,7 +573,7 @@ "measured_value": null, "threshold": null, "evidence": [ - "Structured logging check not implemented for ['YAML', 'JavaScript', 'Markdown', 'JSON', 'TypeScript', 'Shell', 'Go']" + "Structured logging check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" ], "remediation": null, "error_message": null @@ -892,13 +590,14 @@ }, "status": "pass", "score": 100, - "measured_value": "OpenAPI 3.1.0", + "measured_value": "OpenAPI 3.0.3", "threshold": "OpenAPI 3.x with paths and schemas", "evidence": [ - "packages/lm-eval/upstream/bff/openapi.yaml found in repository", - "OpenAPI version: 3.1.0", - "5 endpoints documented", - "13 schemas defined" + "packages/maas/bff/openapi.yaml found in repository", + "Additional OpenAPI files found: packages/notebooks/upstream/workspaces/backend/openapi/swagger.json", + "OpenAPI version: 3.0.3", + "8 endpoints documented", + "8 schemas defined" ], "remediation": null, "error_message": null @@ -1009,6 +708,6 @@ "report_theme": "default", "custom_theme": null }, - "duration_seconds": 85.2, + "duration_seconds": 27.3, "discovered_skills": [] } \ No newline at end of file From fddc783931641a2f9e0c0ad56a441cec30831c8c Mon Sep 17 00:00:00 2001 From: Robert Sun Date: Wed, 18 Mar 2026 17:24:43 -0400 Subject: [PATCH 2/3] feat: add opendatahub-io/odh-dashboard to leaderboard Score: 76.5/100 (Gold) Repository: https://github.com/opendatahub-io/odh-dashboard --- .../2026-03-18T21-24-41-assessment.json | 713 ++++++++++++++++++ 1 file changed, 713 insertions(+) create mode 100644 submissions/opendatahub-io/odh-dashboard/2026-03-18T21-24-41-assessment.json diff --git a/submissions/opendatahub-io/odh-dashboard/2026-03-18T21-24-41-assessment.json b/submissions/opendatahub-io/odh-dashboard/2026-03-18T21-24-41-assessment.json new file mode 100644 index 00000000..e2c43633 --- /dev/null +++ b/submissions/opendatahub-io/odh-dashboard/2026-03-18T21-24-41-assessment.json @@ -0,0 +1,713 @@ +{ + "schema_version": "1.0.0", + "metadata": { + "agentready_version": "2.30.1", + "research_version": "1.0.1", + "assessment_timestamp": "2026-03-18T17:24:09.208511", + "assessment_timestamp_human": "March 18, 2026 at 5:24 PM", + "executed_by": "rosun@rosun-mac", + "command": "/Users/rosun/odh-dashboard-1/.venv/bin/agentready assess . -e type_annotations -e precommit_hooks", + "working_directory": "/Users/rosun/odh-dashboard-1" + }, + "repository": { + "path": "/Users/rosun/odh-dashboard-1", + "name": "odh-dashboard-1", + "url": "https://github.com/opendatahub-io/odh-dashboard.git", + "branch": "main", + "commit_hash": "416f35b0cd58f4177271b1c19f7de745bd0b439a", + "languages": { + "YAML": 363, + "Markdown": 212, + "JavaScript": 170, + "JSON": 119, + "TypeScript": 4855, + "Shell": 23, + "Go": 703 + }, + "total_files": 6841, + "total_lines": 1061957 + }, + "timestamp": "2026-03-18T17:24:09.208511", + "overall_score": 76.5, + "certification_level": "Gold", + "attributes_assessed": 17, + "attributes_skipped": 6, + "attributes_total": 23, + "findings": [ + { + "attribute": { + "id": "claude_md_file", + "name": "CLAUDE.md Configuration Files", + "category": "Context Window Optimization", + "tier": 1, + "description": "Project-specific configuration for Claude Code", + "criteria": "CLAUDE.md file exists in repository root", + "default_weight": 0.1 + }, + "status": "pass", + "score": 100.0, + "measured_value": "present", + "threshold": "present", + "evidence": [ + "CLAUDE.md found at /Users/rosun/odh-dashboard-1/CLAUDE.md", + "Symlink to AGENTS.md (7755 bytes)", + "AGENTS.md also present (cross-tool compatibility)" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "readme_structure", + "name": "README Structure", + "category": "Documentation Standards", + "tier": 1, + "description": "Well-structured README with key sections", + "criteria": "README.md with installation, usage, and development sections", + "default_weight": 0.1 + }, + "status": "pass", + "score": 100.0, + "measured_value": "3/3 sections", + "threshold": "3/3 sections", + "evidence": [ + "Found 3/3 essential sections", + "Installation: \u2713", + "Usage: \u2713", + "Development: \u2713" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "standard_layout", + "name": "Standard Project Layouts", + "category": "Repository Structure", + "tier": 1, + "description": "Follows standard project structure for language", + "criteria": "Standard directories (src/ or project-named, tests/) present", + "default_weight": 0.1 + }, + "status": "fail", + "score": 0.0, + "measured_value": "0/2 directories", + "threshold": "2/2 directories", + "evidence": [ + "Found 0/2 standard directories", + "source directory: \u2717 (no src/ or project-named dir)", + "tests/: \u2717" + ], + "remediation": { + "summary": "Organize code into standard directories", + "steps": [ + "Create a source directory for your code", + "Option A: Use src/ layout (recommended for packages)", + "Option B: Use project-named directory (e.g., mypackage/)", + "Ensure your package has __init__.py", + "Create tests/ directory for test files", + "Add at least one test file" + ], + "tools": [], + "commands": [ + "# Option A: src layout", + "mkdir -p src/mypackage", + "touch src/mypackage/__init__.py", + "# ---", + "# Option B: flat layout (project-named)", + "mkdir -p mypackage", + "touch mypackage/__init__.py", + "# Create tests directory", + "mkdir -p tests", + "touch tests/__init__.py", + "touch tests/test_example.py" + ], + "examples": [ + "# src layout (recommended for distributable packages)\nproject/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 mypackage/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 module.py\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 test_module.py\n\u2514\u2500\u2500 pyproject.toml\n\n# flat layout (common in major projects like pandas, numpy)\nproject/\n\u251c\u2500\u2500 mypackage/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 module.py\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 test_module.py\n\u2514\u2500\u2500 pyproject.toml\n" + ], + "citations": [ + { + "source": "Python Packaging Authority", + "title": "src layout vs flat layout", + "url": "https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/", + "relevance": "Official guidance on Python project layouts" + } + ] + }, + "error_message": null + }, + { + "attribute": { + "id": "lock_files", + "name": "Dependency Pinning for Reproducibility", + "category": "Dependency Management", + "tier": 1, + "description": "Dependencies pinned to exact versions in lock files", + "criteria": "Lock file with pinned versions, updated within 6 months", + "default_weight": 0.1 + }, + "status": "pass", + "score": 100.0, + "measured_value": "package-lock.json", + "threshold": "lock file with pinned versions, < 6 months old", + "evidence": [ + "Found lock file(s): package-lock.json" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "dependency_security", + "name": "Dependency Security & Vulnerability Scanning", + "category": "Security", + "tier": 1, + "description": "Security scanning tools configured for dependencies and code", + "criteria": "Dependabot, Renovate, CodeQL, or SAST tools configured; secret detection enabled", + "default_weight": 0.04 + }, + "status": "pass", + "score": 35, + "measured_value": "Security tools configured: Dependabot", + "threshold": "\u226560 points (Dependabot/Renovate + SAST or multiple scanners)", + "evidence": [ + "\u2713 Dependabot configured for dependency updates", + " 1 package ecosystem(s) monitored" + ], + "remediation": { + "summary": "Add more security scanning tools for comprehensive coverage", + "steps": [ + "Enable Dependabot alerts in GitHub repository settings (or configure Renovate: add renovate.json to repository root)", + "Add CodeQL scanning workflow for SAST", + "Configure secret detection (detect-secrets, gitleaks)", + "Set up language-specific scanners (pip-audit, npm audit, Snyk)" + ], + "tools": [ + "Dependabot", + "Renovate", + "CodeQL", + "detect-secrets", + "pip-audit", + "npm audit" + ], + "commands": [ + "gh repo edit --enable-security", + "pip install detect-secrets # Python secret detection", + "npm audit # JavaScript dependency audit" + ], + "examples": [ + "# .github/dependabot.yml\nversion: 2\nupdates:\n - package-ecosystem: pip\n directory: /\n schedule:\n interval: weekly" + ], + "citations": [ + { + "source": "OWASP", + "title": "Dependency-Check Project", + "url": "https://owasp.org/www-project-dependency-check/", + "relevance": "Open-source tool for detecting known vulnerabilities in dependencies" + }, + { + "source": "GitHub", + "title": "Dependabot Documentation", + "url": "https://docs.github.com/en/code-security/dependabot", + "relevance": "Official guide for configuring automated dependency updates and security alerts" + } + ] + }, + "error_message": null + }, + { + "attribute": { + "id": "test_coverage", + "name": "Test Coverage Requirements", + "category": "Testing & CI/CD", + "tier": 2, + "description": "Test coverage thresholds configured and enforced", + "criteria": ">80% code coverage", + "default_weight": 0.03 + }, + "status": "not_applicable", + "score": null, + "measured_value": null, + "threshold": null, + "evidence": [ + "Not applicable to ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "conventional_commits", + "name": "Conventional Commit Messages", + "category": "Git & Version Control", + "tier": 2, + "description": "Follows conventional commit format", + "criteria": "\u226580% of recent commits follow convention", + "default_weight": 0.03 + }, + "status": "pass", + "score": 100.0, + "measured_value": "configured", + "threshold": "configured", + "evidence": [ + "Commit linting configured" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "gitignore_completeness", + "name": ".gitignore Completeness", + "category": "Git & Version Control", + "tier": 2, + "description": "Comprehensive .gitignore file with language-specific patterns", + "criteria": ".gitignore exists and includes language-specific patterns from GitHub templates", + "default_weight": 0.03 + }, + "status": "pass", + "score": 86.66666666666667, + "measured_value": "13/15 patterns", + "threshold": "\u226570% of language-specific patterns", + "evidence": [ + ".gitignore found (917 bytes)", + "Pattern coverage: 13/15 (87%)", + "Missing 2 recommended patterns" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "one_command_setup", + "name": "One-Command Build/Setup", + "category": "Build & Development", + "tier": 2, + "description": "Single command to set up development environment from fresh clone", + "criteria": "Single command (make setup, npm install, etc.) documented prominently", + "default_weight": 0.03 + }, + "status": "pass", + "score": 100, + "measured_value": "npm install", + "threshold": "single command", + "evidence": [ + "Setup command found in README: 'npm install'", + "Setup automation found: Makefile, package.json", + "Setup instructions in prominent location" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "file_size_limits", + "name": "File Size Limits", + "category": "Context Window Optimization", + "tier": 2, + "description": "Files are reasonably sized for AI context windows", + "criteria": "<5% of files >500 lines, no files >1000 lines", + "default_weight": 0.03 + }, + "status": "fail", + "score": 61.08703250611674, + "measured_value": "51 huge, 152 large out of 5722", + "threshold": "<5% files >500 lines, 0 files >1000 lines", + "evidence": [ + "Found 51 files >1000 lines (0.9% of 5722 files)", + "Largest: backend/src/types.ts (1355 lines)" + ], + "remediation": { + "summary": "Refactor large files into smaller, focused modules", + "steps": [ + "Identify files >1000 lines", + "Split into logical submodules", + "Extract classes/functions into separate files", + "Maintain single responsibility principle" + ], + "tools": [ + "refactoring tools", + "linters" + ], + "commands": [], + "examples": [ + "# Split large file:\n# models.py (1500 lines) \u2192 models/user.py, models/product.py, models/order.py" + ], + "citations": [] + }, + "error_message": null + }, + { + "attribute": { + "id": "separation_of_concerns", + "name": "Separation of Concerns", + "category": "Code Organization", + "tier": 2, + "description": "Code organized with single responsibility per module", + "criteria": "Feature-based organization, cohesive modules, low coupling", + "default_weight": 0.03 + }, + "status": "pass", + "score": 100.0, + "measured_value": "organization:100, cohesion:100, naming:100", + "threshold": "\u226575 overall", + "evidence": [ + "Good directory organization (feature-based or flat)", + "File cohesion: 0/1 files >500 lines", + "No catch-all modules (utils.py, helpers.py) detected" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "concise_documentation", + "name": "Concise Documentation", + "category": "Documentation", + "tier": 2, + "description": "Documentation maximizes information density while minimizing token consumption", + "criteria": "README <500 lines with clear structure, bullet points over prose", + "default_weight": 0.03 + }, + "status": "pass", + "score": 76.0, + "measured_value": "186 lines, 37 headings, 21 bullets", + "threshold": "<500 lines, structured format", + "evidence": [ + "README length: 186 lines (excellent)", + "Heading density: 19.9 per 100 lines (target: 3-5)", + "21 bullet points, 7 code blocks (concise formatting)" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "inline_documentation", + "name": "Inline Documentation", + "category": "Documentation", + "tier": 2, + "description": "Function, class, and module-level documentation using language-specific conventions", + "criteria": "\u226580% of public functions/classes have docstrings", + "default_weight": 0.03 + }, + "status": "not_applicable", + "score": null, + "measured_value": null, + "threshold": null, + "evidence": [ + "Docstring check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "cyclomatic_complexity", + "name": "Cyclomatic Complexity Thresholds", + "category": "Code Quality", + "tier": 3, + "description": "Cyclomatic complexity thresholds enforced", + "criteria": "Average complexity <10, no functions >15", + "default_weight": 0.03 + }, + "status": "skipped", + "score": null, + "measured_value": null, + "threshold": null, + "evidence": [ + "Missing tool: lizard" + ], + "remediation": { + "summary": "Install with: pip install lizard", + "steps": [ + "Install with: pip install lizard" + ], + "tools": [], + "commands": [], + "examples": [], + "citations": [] + }, + "error_message": null + }, + { + "attribute": { + "id": "architecture_decisions", + "name": "Architecture Decision Records (ADRs)", + "category": "Documentation Standards", + "tier": 3, + "description": "Lightweight documents capturing architectural decisions", + "criteria": "ADR directory with documented decisions", + "default_weight": 0.015 + }, + "status": "pass", + "score": 90, + "measured_value": "4 ADRs", + "threshold": "\u22653 ADRs with template", + "evidence": [ + "ADR directory found: docs/adr", + "4 architecture decision records", + "Consistent naming pattern detected", + "Sampled 3 ADRs: template compliance 18/20" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "issue_pr_templates", + "name": "Issue & Pull Request Templates", + "category": "Repository Structure", + "tier": 3, + "description": "Standardized templates for issues and PRs", + "criteria": "PR template and issue templates in .github/", + "default_weight": 0.015 + }, + "status": "pass", + "score": 100, + "measured_value": "PR:True, Issues:2", + "threshold": "PR template + \u22652 issue templates", + "evidence": [ + "PR template found", + "Issue templates found: 2 templates" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "cicd_pipeline_visibility", + "name": "CI/CD Pipeline Visibility", + "category": "Testing & CI/CD", + "tier": 3, + "description": "Clear, well-documented CI/CD configuration files", + "criteria": "CI config with descriptive names, caching, parallelization", + "default_weight": 0.015 + }, + "status": "fail", + "score": 70, + "measured_value": "basic config", + "threshold": "CI with best practices", + "evidence": [ + "CI config found: .github/workflows/release-odh-dashboard.yml, .github/workflows/automl-bff-tests.yml, .github/workflows/eval-hub-bff-tests.yml, .github/workflows/autorag-bff-tests.yml, .github/workflows/eval-hub-frontend-tests.yml, .github/workflows/test.yml, .github/workflows/pr-image-expiry.yml, .github/workflows/stale.yml, .github/workflows/gen-ai-frontend-build.yml, .github/workflows/release-auto-merge.yml, .github/workflows/cypress-e2e-test.yml, .github/workflows/gen-ai-bff-build.yml, .github/workflows/agentready-weekly.yml, .github/workflows/validate-kustomize.yml, .github/workflows/maas-bff-tests.yml, .github/workflows/modular-arch-quality-gates.yml", + "Descriptive job/step names found", + "No caching detected", + "Parallel job execution detected" + ], + "remediation": { + "summary": "Add or improve CI/CD pipeline configuration", + "steps": [ + "Create CI config for your platform (GitHub Actions, GitLab CI, etc.)", + "Define jobs: lint, test, build", + "Use descriptive job and step names", + "Configure dependency caching", + "Enable parallel job execution", + "Upload artifacts: test results, coverage reports", + "Add status badge to README" + ], + "tools": [ + "github-actions", + "gitlab-ci", + "circleci" + ], + "commands": [ + "# Create GitHub Actions workflow", + "mkdir -p .github/workflows", + "touch .github/workflows/ci.yml", + "", + "# Validate workflow", + "gh workflow view ci.yml" + ], + "examples": [ + "# .github/workflows/ci.yml - Good example\n\nname: CI Pipeline\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n\njobs:\n lint:\n name: Lint Code\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Set up Python\n uses: actions/setup-python@v5\n with:\n python-version: '3.11'\n cache: 'pip' # Caching\n\n - name: Install dependencies\n run: pip install -r requirements.txt\n\n - name: Run linters\n run: |\n black --check .\n isort --check .\n ruff check .\n\n test:\n name: Run Tests\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Set up Python\n uses: actions/setup-python@v5\n with:\n python-version: '3.11'\n cache: 'pip'\n\n - name: Install dependencies\n run: pip install -r requirements.txt\n\n - name: Run tests with coverage\n run: pytest --cov --cov-report=xml\n\n - name: Upload coverage reports\n uses: codecov/codecov-action@v3\n with:\n files: ./coverage.xml\n\n build:\n name: Build Package\n runs-on: ubuntu-latest\n needs: [lint, test] # Runs after lint/test pass\n steps:\n - uses: actions/checkout@v4\n\n - name: Build package\n run: python -m build\n\n - name: Upload build artifacts\n uses: actions/upload-artifact@v3\n with:\n name: dist\n path: dist/\n" + ], + "citations": [ + { + "source": "GitHub", + "title": "GitHub Actions Documentation", + "url": "https://docs.github.com/en/actions", + "relevance": "Official GitHub Actions guide" + }, + { + "source": "CircleCI", + "title": "CI/CD Best Practices", + "url": "https://circleci.com/blog/ci-cd-best-practices/", + "relevance": "Industry best practices for CI/CD" + } + ] + }, + "error_message": null + }, + { + "attribute": { + "id": "semantic_naming", + "name": "Semantic Naming", + "category": "Code Quality", + "tier": 3, + "description": "Systematic naming patterns following language conventions", + "criteria": "Language conventions followed, avoid generic names", + "default_weight": 0.015 + }, + "status": "not_applicable", + "score": null, + "measured_value": null, + "threshold": null, + "evidence": [ + "Naming check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "structured_logging", + "name": "Structured Logging", + "category": "Code Quality", + "tier": 3, + "description": "Logging in structured format (JSON) with consistent fields", + "criteria": "Structured logging library configured (structlog, winston, zap)", + "default_weight": 0.015 + }, + "status": "not_applicable", + "score": null, + "measured_value": null, + "threshold": null, + "evidence": [ + "Structured logging check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "openapi_specs", + "name": "OpenAPI/Swagger Specifications", + "category": "API Documentation", + "tier": 3, + "description": "Machine-readable API documentation in OpenAPI format", + "criteria": "OpenAPI 3.x spec with complete endpoint documentation", + "default_weight": 0.015 + }, + "status": "pass", + "score": 100, + "measured_value": "OpenAPI 3.0.3", + "threshold": "OpenAPI 3.x with paths and schemas", + "evidence": [ + "packages/maas/bff/openapi.yaml found in repository", + "Additional OpenAPI files found: packages/notebooks/upstream/workspaces/backend/openapi/swagger.json", + "OpenAPI version: 3.0.3", + "8 endpoints documented", + "8 schemas defined" + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "branch_protection", + "name": "Branch Protection Rules", + "category": "Git & Version Control", + "tier": 4, + "description": "Required status checks and review approvals before merging", + "criteria": "Branch protection enabled with status checks and required reviews", + "default_weight": 0.005 + }, + "status": "not_applicable", + "score": null, + "measured_value": null, + "threshold": null, + "evidence": [ + "Requires GitHub API integration for branch protection checks. Future implementation will verify: required status checks, required reviews, force push prevention, and branch update requirements." + ], + "remediation": null, + "error_message": null + }, + { + "attribute": { + "id": "code_smells", + "name": "Code Smell Elimination", + "category": "Code Quality", + "tier": 4, + "description": "Linter configuration for detecting code smells and anti-patterns", + "criteria": "Language-specific linters configured (pylint, ESLint, RuboCop, etc.)", + "default_weight": 0.01 + }, + "status": "fail", + "score": 33.33333333333333, + "measured_value": "ESLint", + "threshold": "\u226560% of applicable linters configured", + "evidence": [ + "Linters configured: ESLint", + "Coverage: 20/60 points (33%)" + ], + "remediation": { + "summary": "Configure 3 missing linter(s)", + "steps": [ + "Configure golangci-lint for Go", + "Add actionlint for GitHub Actions workflow validation", + "Configure markdownlint for documentation quality" + ], + "tools": [ + "golangci-lint", + "actionlint", + "markdownlint" + ], + "commands": [ + "go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest", + "npm install --save-dev markdownlint-cli && touch .markdownlint.json" + ], + "examples": [ + "# .pylintrc example\n[MASTER]\nmax-line-length=100\n\n[MESSAGES CONTROL]\ndisable=C0111", + "# .eslintrc.json example\n{\n \"extends\": \"eslint:recommended\",\n \"rules\": {\n \"no-console\": \"warn\"\n }\n}" + ], + "citations": [ + { + "source": "Pylint", + "title": "Pylint Documentation", + "url": "https://pylint.readthedocs.io/", + "relevance": "Official documentation for Pylint code analysis tool" + }, + { + "source": "ESLint", + "title": "ESLint Documentation", + "url": "https://eslint.org/docs/latest/", + "relevance": "Official documentation for ESLint JavaScript/TypeScript linter" + } + ] + }, + "error_message": null + }, + { + "attribute": { + "id": "container_setup", + "name": "Container/Virtualization Setup", + "category": "Build & Development", + "tier": 4, + "description": "Container configuration for consistent development environments", + "criteria": "Dockerfile/Containerfile, docker-compose.yml, .dockerignore, multi-stage builds", + "default_weight": 0.01 + }, + "status": "pass", + "score": 70, + "measured_value": "70 points", + "threshold": "\u226570 points (Dockerfile + compose + .dockerignore)", + "evidence": [ + "\u2713 Dockerfile present", + "\u2713 Multi-stage build detected (optimized image size)", + "\u2713 .dockerignore present (excludes unnecessary files)" + ], + "remediation": null, + "error_message": null + } + ], + "config": { + "weights": {}, + "excluded_attributes": [], + "language_overrides": {}, + "output_dir": null, + "report_theme": "default", + "custom_theme": null + }, + "duration_seconds": 13.8, + "discovered_skills": [] +} \ No newline at end of file From e871b6201aeba603098473b9a707dbac835c9bed Mon Sep 17 00:00:00 2001 From: rsun19 Date: Wed, 18 Mar 2026 17:28:13 -0400 Subject: [PATCH 3/3] deleted old file --- .../assessment-20260318-191501.json | 713 ------------------ 1 file changed, 713 deletions(-) delete mode 100644 submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json diff --git a/submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json b/submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json deleted file mode 100644 index 1627c207..00000000 --- a/submissions/opendatahub-io/odh-dashboard/assessment-20260318-191501.json +++ /dev/null @@ -1,713 +0,0 @@ -{ - "schema_version": "1.0.0", - "metadata": { - "agentready_version": "2.29.6", - "research_version": "1.0.1", - "assessment_timestamp": "2026-03-18T19:15:01.057439", - "assessment_timestamp_human": "March 18, 2026 at 7:15 PM", - "executed_by": "agentready@498c10df4cf4", - "command": "/usr/local/bin/agentready assess /repo --output-dir /reports -e type_annotations -e precommit_hooks", - "working_directory": "/tmp" - }, - "repository": { - "path": "/repo", - "name": "repo", - "url": "https://github.com/opendatahub-io/odh-dashboard.git", - "branch": "main", - "commit_hash": "416f35b0cd58f4177271b1c19f7de745bd0b439a", - "languages": { - "YAML": 363, - "Markdown": 212, - "JavaScript": 170, - "JSON": 119, - "TypeScript": 4855, - "Shell": 23, - "Go": 703 - }, - "total_files": 6841, - "total_lines": 1061957 - }, - "timestamp": "2026-03-18T19:15:01.057439", - "overall_score": 76.5, - "certification_level": "Gold", - "attributes_assessed": 17, - "attributes_skipped": 6, - "attributes_total": 23, - "findings": [ - { - "attribute": { - "id": "claude_md_file", - "name": "CLAUDE.md Configuration Files", - "category": "Context Window Optimization", - "tier": 1, - "description": "Project-specific configuration for Claude Code", - "criteria": "CLAUDE.md file exists in repository root", - "default_weight": 0.1 - }, - "status": "pass", - "score": 100.0, - "measured_value": "present", - "threshold": "present", - "evidence": [ - "CLAUDE.md found at /repo/CLAUDE.md", - "Symlink to AGENTS.md (7755 bytes)", - "AGENTS.md also present (cross-tool compatibility)" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "readme_structure", - "name": "README Structure", - "category": "Documentation Standards", - "tier": 1, - "description": "Well-structured README with key sections", - "criteria": "README.md with installation, usage, and development sections", - "default_weight": 0.1 - }, - "status": "pass", - "score": 100.0, - "measured_value": "3/3 sections", - "threshold": "3/3 sections", - "evidence": [ - "Found 3/3 essential sections", - "Installation: \u2713", - "Usage: \u2713", - "Development: \u2713" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "standard_layout", - "name": "Standard Project Layouts", - "category": "Repository Structure", - "tier": 1, - "description": "Follows standard project structure for language", - "criteria": "Standard directories (src/ or project-named, tests/) present", - "default_weight": 0.1 - }, - "status": "fail", - "score": 0.0, - "measured_value": "0/2 directories", - "threshold": "2/2 directories", - "evidence": [ - "Found 0/2 standard directories", - "source directory: \u2717 (no src/ or project-named dir)", - "tests/: \u2717" - ], - "remediation": { - "summary": "Organize code into standard directories", - "steps": [ - "Create a source directory for your code", - "Option A: Use src/ layout (recommended for packages)", - "Option B: Use project-named directory (e.g., mypackage/)", - "Ensure your package has __init__.py", - "Create tests/ directory for test files", - "Add at least one test file" - ], - "tools": [], - "commands": [ - "# Option A: src layout", - "mkdir -p src/mypackage", - "touch src/mypackage/__init__.py", - "# ---", - "# Option B: flat layout (project-named)", - "mkdir -p mypackage", - "touch mypackage/__init__.py", - "# Create tests directory", - "mkdir -p tests", - "touch tests/__init__.py", - "touch tests/test_example.py" - ], - "examples": [ - "# src layout (recommended for distributable packages)\nproject/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 mypackage/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 module.py\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 test_module.py\n\u2514\u2500\u2500 pyproject.toml\n\n# flat layout (common in major projects like pandas, numpy)\nproject/\n\u251c\u2500\u2500 mypackage/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 module.py\n\u251c\u2500\u2500 tests/\n\u2502 \u2514\u2500\u2500 test_module.py\n\u2514\u2500\u2500 pyproject.toml\n" - ], - "citations": [ - { - "source": "Python Packaging Authority", - "title": "src layout vs flat layout", - "url": "https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/", - "relevance": "Official guidance on Python project layouts" - } - ] - }, - "error_message": null - }, - { - "attribute": { - "id": "lock_files", - "name": "Dependency Pinning for Reproducibility", - "category": "Dependency Management", - "tier": 1, - "description": "Dependencies pinned to exact versions in lock files", - "criteria": "Lock file with pinned versions, updated within 6 months", - "default_weight": 0.1 - }, - "status": "pass", - "score": 100.0, - "measured_value": "package-lock.json", - "threshold": "lock file with pinned versions, < 6 months old", - "evidence": [ - "Found lock file(s): package-lock.json" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "dependency_security", - "name": "Dependency Security & Vulnerability Scanning", - "category": "Security", - "tier": 1, - "description": "Security scanning tools configured for dependencies and code", - "criteria": "Dependabot, Renovate, CodeQL, or SAST tools configured; secret detection enabled", - "default_weight": 0.04 - }, - "status": "pass", - "score": 35, - "measured_value": "Security tools configured: Dependabot", - "threshold": "\u226560 points (Dependabot/Renovate + SAST or multiple scanners)", - "evidence": [ - "\u2713 Dependabot configured for dependency updates", - " 1 package ecosystem(s) monitored" - ], - "remediation": { - "summary": "Add more security scanning tools for comprehensive coverage", - "steps": [ - "Enable Dependabot alerts in GitHub repository settings (or configure Renovate: add renovate.json to repository root)", - "Add CodeQL scanning workflow for SAST", - "Configure secret detection (detect-secrets, gitleaks)", - "Set up language-specific scanners (pip-audit, npm audit, Snyk)" - ], - "tools": [ - "Dependabot", - "Renovate", - "CodeQL", - "detect-secrets", - "pip-audit", - "npm audit" - ], - "commands": [ - "gh repo edit --enable-security", - "pip install detect-secrets # Python secret detection", - "npm audit # JavaScript dependency audit" - ], - "examples": [ - "# .github/dependabot.yml\nversion: 2\nupdates:\n - package-ecosystem: pip\n directory: /\n schedule:\n interval: weekly" - ], - "citations": [ - { - "source": "OWASP", - "title": "Dependency-Check Project", - "url": "https://owasp.org/www-project-dependency-check/", - "relevance": "Open-source tool for detecting known vulnerabilities in dependencies" - }, - { - "source": "GitHub", - "title": "Dependabot Documentation", - "url": "https://docs.github.com/en/code-security/dependabot", - "relevance": "Official guide for configuring automated dependency updates and security alerts" - } - ] - }, - "error_message": null - }, - { - "attribute": { - "id": "test_coverage", - "name": "Test Coverage Requirements", - "category": "Testing & CI/CD", - "tier": 2, - "description": "Test coverage thresholds configured and enforced", - "criteria": ">80% code coverage", - "default_weight": 0.03 - }, - "status": "not_applicable", - "score": null, - "measured_value": null, - "threshold": null, - "evidence": [ - "Not applicable to ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "conventional_commits", - "name": "Conventional Commit Messages", - "category": "Git & Version Control", - "tier": 2, - "description": "Follows conventional commit format", - "criteria": "\u226580% of recent commits follow convention", - "default_weight": 0.03 - }, - "status": "pass", - "score": 100.0, - "measured_value": "configured", - "threshold": "configured", - "evidence": [ - "Commit linting configured" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "gitignore_completeness", - "name": ".gitignore Completeness", - "category": "Git & Version Control", - "tier": 2, - "description": "Comprehensive .gitignore file with language-specific patterns", - "criteria": ".gitignore exists and includes language-specific patterns from GitHub templates", - "default_weight": 0.03 - }, - "status": "pass", - "score": 86.66666666666667, - "measured_value": "13/15 patterns", - "threshold": "\u226570% of language-specific patterns", - "evidence": [ - ".gitignore found (917 bytes)", - "Pattern coverage: 13/15 (87%)", - "Missing 2 recommended patterns" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "one_command_setup", - "name": "One-Command Build/Setup", - "category": "Build & Development", - "tier": 2, - "description": "Single command to set up development environment from fresh clone", - "criteria": "Single command (make setup, npm install, etc.) documented prominently", - "default_weight": 0.03 - }, - "status": "pass", - "score": 100, - "measured_value": "npm install", - "threshold": "single command", - "evidence": [ - "Setup command found in README: 'npm install'", - "Setup automation found: Makefile, package.json", - "Setup instructions in prominent location" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "file_size_limits", - "name": "File Size Limits", - "category": "Context Window Optimization", - "tier": 2, - "description": "Files are reasonably sized for AI context windows", - "criteria": "<5% of files >500 lines, no files >1000 lines", - "default_weight": 0.03 - }, - "status": "fail", - "score": 61.08703250611674, - "measured_value": "51 huge, 152 large out of 5722", - "threshold": "<5% files >500 lines, 0 files >1000 lines", - "evidence": [ - "Found 51 files >1000 lines (0.9% of 5722 files)", - "Largest: backend/src/types.ts (1355 lines)" - ], - "remediation": { - "summary": "Refactor large files into smaller, focused modules", - "steps": [ - "Identify files >1000 lines", - "Split into logical submodules", - "Extract classes/functions into separate files", - "Maintain single responsibility principle" - ], - "tools": [ - "refactoring tools", - "linters" - ], - "commands": [], - "examples": [ - "# Split large file:\n# models.py (1500 lines) \u2192 models/user.py, models/product.py, models/order.py" - ], - "citations": [] - }, - "error_message": null - }, - { - "attribute": { - "id": "separation_of_concerns", - "name": "Separation of Concerns", - "category": "Code Organization", - "tier": 2, - "description": "Code organized with single responsibility per module", - "criteria": "Feature-based organization, cohesive modules, low coupling", - "default_weight": 0.03 - }, - "status": "pass", - "score": 100.0, - "measured_value": "organization:100, cohesion:100, naming:100", - "threshold": "\u226575 overall", - "evidence": [ - "Good directory organization (feature-based or flat)", - "File cohesion: 0/1 files >500 lines", - "No catch-all modules (utils.py, helpers.py) detected" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "concise_documentation", - "name": "Concise Documentation", - "category": "Documentation", - "tier": 2, - "description": "Documentation maximizes information density while minimizing token consumption", - "criteria": "README <500 lines with clear structure, bullet points over prose", - "default_weight": 0.03 - }, - "status": "pass", - "score": 76.0, - "measured_value": "186 lines, 37 headings, 21 bullets", - "threshold": "<500 lines, structured format", - "evidence": [ - "README length: 186 lines (excellent)", - "Heading density: 19.9 per 100 lines (target: 3-5)", - "21 bullet points, 7 code blocks (concise formatting)" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "inline_documentation", - "name": "Inline Documentation", - "category": "Documentation", - "tier": 2, - "description": "Function, class, and module-level documentation using language-specific conventions", - "criteria": "\u226580% of public functions/classes have docstrings", - "default_weight": 0.03 - }, - "status": "not_applicable", - "score": null, - "measured_value": null, - "threshold": null, - "evidence": [ - "Docstring check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "cyclomatic_complexity", - "name": "Cyclomatic Complexity Thresholds", - "category": "Code Quality", - "tier": 3, - "description": "Cyclomatic complexity thresholds enforced", - "criteria": "Average complexity <10, no functions >15", - "default_weight": 0.03 - }, - "status": "skipped", - "score": null, - "measured_value": null, - "threshold": null, - "evidence": [ - "Missing tool: lizard" - ], - "remediation": { - "summary": "Install with: pip install lizard", - "steps": [ - "Install with: pip install lizard" - ], - "tools": [], - "commands": [], - "examples": [], - "citations": [] - }, - "error_message": null - }, - { - "attribute": { - "id": "architecture_decisions", - "name": "Architecture Decision Records (ADRs)", - "category": "Documentation Standards", - "tier": 3, - "description": "Lightweight documents capturing architectural decisions", - "criteria": "ADR directory with documented decisions", - "default_weight": 0.015 - }, - "status": "pass", - "score": 90, - "measured_value": "4 ADRs", - "threshold": "\u22653 ADRs with template", - "evidence": [ - "ADR directory found: docs/adr", - "4 architecture decision records", - "Consistent naming pattern detected", - "Sampled 3 ADRs: template compliance 18/20" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "issue_pr_templates", - "name": "Issue & Pull Request Templates", - "category": "Repository Structure", - "tier": 3, - "description": "Standardized templates for issues and PRs", - "criteria": "PR template and issue templates in .github/", - "default_weight": 0.015 - }, - "status": "pass", - "score": 100, - "measured_value": "PR:True, Issues:2", - "threshold": "PR template + \u22652 issue templates", - "evidence": [ - "PR template found", - "Issue templates found: 2 templates" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "cicd_pipeline_visibility", - "name": "CI/CD Pipeline Visibility", - "category": "Testing & CI/CD", - "tier": 3, - "description": "Clear, well-documented CI/CD configuration files", - "criteria": "CI config with descriptive names, caching, parallelization", - "default_weight": 0.015 - }, - "status": "fail", - "score": 70, - "measured_value": "basic config", - "threshold": "CI with best practices", - "evidence": [ - "CI config found: .github/workflows/release-odh-dashboard.yml, .github/workflows/automl-bff-tests.yml, .github/workflows/eval-hub-bff-tests.yml, .github/workflows/autorag-bff-tests.yml, .github/workflows/eval-hub-frontend-tests.yml, .github/workflows/test.yml, .github/workflows/pr-image-expiry.yml, .github/workflows/stale.yml, .github/workflows/gen-ai-frontend-build.yml, .github/workflows/release-auto-merge.yml, .github/workflows/cypress-e2e-test.yml, .github/workflows/gen-ai-bff-build.yml, .github/workflows/agentready-weekly.yml, .github/workflows/validate-kustomize.yml, .github/workflows/maas-bff-tests.yml, .github/workflows/modular-arch-quality-gates.yml", - "Descriptive job/step names found", - "No caching detected", - "Parallel job execution detected" - ], - "remediation": { - "summary": "Add or improve CI/CD pipeline configuration", - "steps": [ - "Create CI config for your platform (GitHub Actions, GitLab CI, etc.)", - "Define jobs: lint, test, build", - "Use descriptive job and step names", - "Configure dependency caching", - "Enable parallel job execution", - "Upload artifacts: test results, coverage reports", - "Add status badge to README" - ], - "tools": [ - "github-actions", - "gitlab-ci", - "circleci" - ], - "commands": [ - "# Create GitHub Actions workflow", - "mkdir -p .github/workflows", - "touch .github/workflows/ci.yml", - "", - "# Validate workflow", - "gh workflow view ci.yml" - ], - "examples": [ - "# .github/workflows/ci.yml - Good example\n\nname: CI Pipeline\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n\njobs:\n lint:\n name: Lint Code\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Set up Python\n uses: actions/setup-python@v5\n with:\n python-version: '3.11'\n cache: 'pip' # Caching\n\n - name: Install dependencies\n run: pip install -r requirements.txt\n\n - name: Run linters\n run: |\n black --check .\n isort --check .\n ruff check .\n\n test:\n name: Run Tests\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Set up Python\n uses: actions/setup-python@v5\n with:\n python-version: '3.11'\n cache: 'pip'\n\n - name: Install dependencies\n run: pip install -r requirements.txt\n\n - name: Run tests with coverage\n run: pytest --cov --cov-report=xml\n\n - name: Upload coverage reports\n uses: codecov/codecov-action@v3\n with:\n files: ./coverage.xml\n\n build:\n name: Build Package\n runs-on: ubuntu-latest\n needs: [lint, test] # Runs after lint/test pass\n steps:\n - uses: actions/checkout@v4\n\n - name: Build package\n run: python -m build\n\n - name: Upload build artifacts\n uses: actions/upload-artifact@v3\n with:\n name: dist\n path: dist/\n" - ], - "citations": [ - { - "source": "GitHub", - "title": "GitHub Actions Documentation", - "url": "https://docs.github.com/en/actions", - "relevance": "Official GitHub Actions guide" - }, - { - "source": "CircleCI", - "title": "CI/CD Best Practices", - "url": "https://circleci.com/blog/ci-cd-best-practices/", - "relevance": "Industry best practices for CI/CD" - } - ] - }, - "error_message": null - }, - { - "attribute": { - "id": "semantic_naming", - "name": "Semantic Naming", - "category": "Code Quality", - "tier": 3, - "description": "Systematic naming patterns following language conventions", - "criteria": "Language conventions followed, avoid generic names", - "default_weight": 0.015 - }, - "status": "not_applicable", - "score": null, - "measured_value": null, - "threshold": null, - "evidence": [ - "Naming check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "structured_logging", - "name": "Structured Logging", - "category": "Code Quality", - "tier": 3, - "description": "Logging in structured format (JSON) with consistent fields", - "criteria": "Structured logging library configured (structlog, winston, zap)", - "default_weight": 0.015 - }, - "status": "not_applicable", - "score": null, - "measured_value": null, - "threshold": null, - "evidence": [ - "Structured logging check not implemented for ['YAML', 'Markdown', 'JavaScript', 'JSON', 'TypeScript', 'Shell', 'Go']" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "openapi_specs", - "name": "OpenAPI/Swagger Specifications", - "category": "API Documentation", - "tier": 3, - "description": "Machine-readable API documentation in OpenAPI format", - "criteria": "OpenAPI 3.x spec with complete endpoint documentation", - "default_weight": 0.015 - }, - "status": "pass", - "score": 100, - "measured_value": "OpenAPI 3.0.3", - "threshold": "OpenAPI 3.x with paths and schemas", - "evidence": [ - "packages/maas/bff/openapi.yaml found in repository", - "Additional OpenAPI files found: packages/notebooks/upstream/workspaces/backend/openapi/swagger.json", - "OpenAPI version: 3.0.3", - "8 endpoints documented", - "8 schemas defined" - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "branch_protection", - "name": "Branch Protection Rules", - "category": "Git & Version Control", - "tier": 4, - "description": "Required status checks and review approvals before merging", - "criteria": "Branch protection enabled with status checks and required reviews", - "default_weight": 0.005 - }, - "status": "not_applicable", - "score": null, - "measured_value": null, - "threshold": null, - "evidence": [ - "Requires GitHub API integration for branch protection checks. Future implementation will verify: required status checks, required reviews, force push prevention, and branch update requirements." - ], - "remediation": null, - "error_message": null - }, - { - "attribute": { - "id": "code_smells", - "name": "Code Smell Elimination", - "category": "Code Quality", - "tier": 4, - "description": "Linter configuration for detecting code smells and anti-patterns", - "criteria": "Language-specific linters configured (pylint, ESLint, RuboCop, etc.)", - "default_weight": 0.01 - }, - "status": "fail", - "score": 33.33333333333333, - "measured_value": "ESLint", - "threshold": "\u226560% of applicable linters configured", - "evidence": [ - "Linters configured: ESLint", - "Coverage: 20/60 points (33%)" - ], - "remediation": { - "summary": "Configure 3 missing linter(s)", - "steps": [ - "Configure golangci-lint for Go", - "Add actionlint for GitHub Actions workflow validation", - "Configure markdownlint for documentation quality" - ], - "tools": [ - "golangci-lint", - "actionlint", - "markdownlint" - ], - "commands": [ - "go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest", - "npm install --save-dev markdownlint-cli && touch .markdownlint.json" - ], - "examples": [ - "# .pylintrc example\n[MASTER]\nmax-line-length=100\n\n[MESSAGES CONTROL]\ndisable=C0111", - "# .eslintrc.json example\n{\n \"extends\": \"eslint:recommended\",\n \"rules\": {\n \"no-console\": \"warn\"\n }\n}" - ], - "citations": [ - { - "source": "Pylint", - "title": "Pylint Documentation", - "url": "https://pylint.readthedocs.io/", - "relevance": "Official documentation for Pylint code analysis tool" - }, - { - "source": "ESLint", - "title": "ESLint Documentation", - "url": "https://eslint.org/docs/latest/", - "relevance": "Official documentation for ESLint JavaScript/TypeScript linter" - } - ] - }, - "error_message": null - }, - { - "attribute": { - "id": "container_setup", - "name": "Container/Virtualization Setup", - "category": "Build & Development", - "tier": 4, - "description": "Container configuration for consistent development environments", - "criteria": "Dockerfile/Containerfile, docker-compose.yml, .dockerignore, multi-stage builds", - "default_weight": 0.01 - }, - "status": "pass", - "score": 70, - "measured_value": "70 points", - "threshold": "\u226570 points (Dockerfile + compose + .dockerignore)", - "evidence": [ - "\u2713 Dockerfile present", - "\u2713 Multi-stage build detected (optimized image size)", - "\u2713 .dockerignore present (excludes unnecessary files)" - ], - "remediation": null, - "error_message": null - } - ], - "config": { - "weights": {}, - "excluded_attributes": [], - "language_overrides": {}, - "output_dir": null, - "report_theme": "default", - "custom_theme": null - }, - "duration_seconds": 27.3, - "discovered_skills": [] -} \ No newline at end of file