diff --git a/src/agentready/assessors/__init__.py b/src/agentready/assessors/__init__.py index 4aaf8864..b77af3a3 100644 --- a/src/agentready/assessors/__init__.py +++ b/src/agentready/assessors/__init__.py @@ -106,14 +106,14 @@ def create_all_assessors() -> list[BaseAssessor]: # Tier 3 Important — 14% total DesignIntentAssessor(), # NEW (2%) RepomixConfigAssessor(), # 2% - CyclomaticComplexityAssessor(), # 3% + CyclomaticComplexityAssessor(), # 2% ArchitectureDecisionsAssessor(), # 3% - IssuePRTemplatesAssessor(), # 3% - StructuredLoggingAssessor(), # 3% + StructuredLoggingAssessor(), # 2% OpenAPISpecsAssessor(), # 3% # Tier 4 Advanced — 4% total (1% each) BranchProtectionAssessor(), CodeSmellsAssessor(), + IssuePRTemplatesAssessor(), # 1% ContainerSetupAssessor(), ProgressiveDisclosureAssessor(), # NEW ] diff --git a/src/agentready/assessors/code_quality.py b/src/agentready/assessors/code_quality.py index c0b5ff69..2368cac0 100644 --- a/src/agentready/assessors/code_quality.py +++ b/src/agentready/assessors/code_quality.py @@ -279,7 +279,7 @@ def attribute(self) -> Attribute: tier=self.tier, description="Cyclomatic complexity thresholds enforced", criteria="Average complexity <10, no functions >15", - default_weight=0.03, + default_weight=0.02, ) def is_applicable(self, repository: Repository) -> bool: @@ -423,7 +423,7 @@ def _create_remediation(self) -> Remediation: class StructuredLoggingAssessor(BaseAssessor): """Assesses use of structured logging libraries. - Tier 3 Important (1.5% weight) - Structured logs are machine-parseable + Tier 3 Important (2% weight) - Structured logs are machine-parseable and enable AI to analyze logs for debugging and optimization. """ @@ -444,7 +444,7 @@ def attribute(self) -> Attribute: tier=self.tier, description="Logging in structured format (JSON) with consistent fields", criteria="Structured logging library configured (structlog, winston, zap)", - default_weight=0.015, + default_weight=0.02, ) def is_applicable(self, repository: Repository) -> bool: @@ -668,8 +668,8 @@ def _has_actionlint(self, repository: Repository) -> bool: workflows_dir = repository.path / ".github" / "workflows" if workflows_dir.exists(): try: - for workflow_file in workflows_dir.glob("*.yml") + workflows_dir.glob( - "*.yaml" + for workflow_file in list(workflows_dir.glob("*.yml")) + list( + workflows_dir.glob("*.yaml") ): content = workflow_file.read_text() if "actionlint" in content: diff --git a/src/agentready/assessors/documentation.py b/src/agentready/assessors/documentation.py index 71d7e36f..ac294e92 100644 --- a/src/agentready/assessors/documentation.py +++ b/src/agentready/assessors/documentation.py @@ -517,7 +517,7 @@ def _create_remediation(self) -> Remediation: class ArchitectureDecisionsAssessor(BaseAssessor): """Assesses presence and quality of Architecture Decision Records (ADRs). - Tier 3 Important (1.5% weight) - ADRs provide historical context for + Tier 3 Important (3% weight) - ADRs provide historical context for architectural decisions, helping AI understand "why" choices were made. """ @@ -1271,7 +1271,7 @@ def calculate_discount(price: float, discount_percent: float) -> float: class OpenAPISpecsAssessor(BaseAssessor): """Assesses presence and quality of OpenAPI specification. - Tier 3 Important (1.5% weight) - Machine-readable API documentation + Tier 3 Important (3% weight) - Machine-readable API documentation enables AI to generate client code, tests, and integration code. """ diff --git a/src/agentready/assessors/security.py b/src/agentready/assessors/security.py index 29f5f0f9..0c0564e9 100644 --- a/src/agentready/assessors/security.py +++ b/src/agentready/assessors/security.py @@ -34,7 +34,7 @@ def attribute(self) -> Attribute: tier=self.tier, description="Security scanning tools configured for dependencies and code", criteria="Dependabot, Renovate, CodeQL, or SAST tools configured; secret detection enabled", - default_weight=0.04, # Combined weight + default_weight=0.05, ) def assess(self, repository: Repository) -> Finding: diff --git a/src/agentready/assessors/structure.py b/src/agentready/assessors/structure.py index 6cc17023..6409ecf4 100644 --- a/src/agentready/assessors/structure.py +++ b/src/agentready/assessors/structure.py @@ -611,8 +611,8 @@ def _create_remediation(self) -> Remediation: class IssuePRTemplatesAssessor(BaseAssessor): """Assesses presence of GitHub issue and PR templates. - Tier 3 Important (1.5% weight) - Templates provide structure for AI - when creating issues/PRs and ensure consistent formatting. + Tier 4 Advanced (1% weight) - Templates are a nice-to-have process + improvement but not fundamental to agent code comprehension. """ @property @@ -621,7 +621,7 @@ def attribute_id(self) -> str: @property def tier(self) -> int: - return 3 # Important + return 4 # Advanced @property def attribute(self) -> Attribute: @@ -632,7 +632,7 @@ def attribute(self) -> Attribute: tier=self.tier, description="Standardized templates for issues and PRs", criteria="PR template and issue templates in .github/", - default_weight=0.015, + default_weight=0.01, ) def assess(self, repository: Repository) -> Finding: diff --git a/src/agentready/assessors/stub_assessors.py b/src/agentready/assessors/stub_assessors.py index 9679b007..dbec8079 100644 --- a/src/agentready/assessors/stub_assessors.py +++ b/src/agentready/assessors/stub_assessors.py @@ -40,7 +40,7 @@ def attribute(self) -> Attribute: tier=self.tier, description="Dependencies pinned to exact versions in lock files", criteria="Lock file with pinned versions, updated within 6 months", - default_weight=0.10, + default_weight=0.05, ) def assess(self, repository: Repository) -> Finding: