Skip to content

Conversation

@jeremyeder
Copy link
Contributor

@jeremyeder jeremyeder commented Nov 25, 2025

Implement FileSizeLimitsAssessor to check for excessively large files that strain AI context windows. This Tier 2 critical assessor helps identify files that should be refactored into smaller modules.

Features:

  • Checks source files across 12+ programming languages
  • Flags files >1000 lines (fail) and 500-1000 lines (warn)
  • Provides proportional scoring based on percentage of large files
  • Includes actionable remediation guidance for refactoring

Also removed duplicate one_command_setup stub (already implemented in structure.py).

This brings implemented assessors to 24/31 (7 stubs remaining).

🤖 Generated with Claude Code

Description

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactoring (no functional changes)
  • Performance improvement
  • Test coverage improvement

Related Issues

Fixes #
Relates to #

Changes Made

Testing

  • Unit tests pass (pytest)
  • Integration tests pass
  • Manual testing performed
  • No new warnings or errors

Checklist

  • My code follows the project's code style
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published

Screenshots (if applicable)

Additional Notes

Summary by CodeRabbit

  • New Features
    • File Size Limits assessor is now fully operational, scanning source code files and assessing file sizes against thresholds (500 and 1000+ lines) to evaluate code maintainability.

✏️ Tip: You can customize this high-level summary in your review settings.

Implement FileSizeLimitsAssessor to check for excessively large files
that strain AI context windows. This Tier 2 critical assessor helps
identify files that should be refactored into smaller modules.

Features:
- Checks source files across 12+ programming languages
- Flags files >1000 lines (fail) and 500-1000 lines (warn)
- Provides proportional scoring based on percentage of large files
- Includes actionable remediation guidance for refactoring

Also removed duplicate one_command_setup stub (already implemented in
structure.py).

This brings implemented assessors to 24/31 (7 stubs remaining).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@coderabbitai
Copy link

coderabbitai bot commented Nov 25, 2025

Walkthrough

The FileSizeLimitsAssessor transitions from a stub to a fully implemented Tier 2 Critical assessor that scans source code files, counts lines, and computes scores based on file size thresholds. It is integrated into the assessor factory and replaces two removed stub entries in the assessor creation pipeline.

Changes

Cohort / File(s) Summary
Assessor Factory Configuration
src/agentready/assessors/__init__.py
Added FileSizeLimitsAssessor to public imports and integrated into create_all_assessors() factory (Tier 2 Critical). Updated implementation count from 6 to 7, stub count from 4 to 3.
Assessor Implementation
src/agentready/assessors/stub_assessors.py
Implemented FileSizeLimitsAssessor class with methods for attribute_id, tier, attribute, and assess. Scans source files, counts lines, returns not_applicable if no sources found, computes score based on files >500 and >1000 lines. Removed stub instantiations for one_command_setup and file_size_limits from create_stub_assessors().

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Focus areas: Core logic in FileSizeLimitsAssessor.assess() method, particularly file scanning, line counting, and scoring thresholds
  • Verify: File extension patterns and line-count logic accuracy; remediation plan messaging for large vs. huge files

Poem

🐰 With whiskers twitched and code review keen,
I find the file-size assessor, lean!
From stub to life, five hundred lines divine,
A thousand crossed? This assessor will shine!
hippity-hop to cleaner code design! 🐇

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.86% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: implementing the FileSizeLimitsAssessor (Tier 2) assessor, which is the primary objective of the changeset.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/one-command-setup-assessor

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

This comment was marked as resolved.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 244ba8b and 25ed2e5.

📒 Files selected for processing (2)
  • src/agentready/assessors/__init__.py (2 hunks)
  • src/agentready/assessors/stub_assessors.py (2 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/assessors/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

**/assessors/*.py: All new assessors must have unit tests with >80% code coverage maintained
All new assessor classes must inherit from BaseAssessor and implement required methods: attribute_id property, assess(repository) method, and optional is_applicable(repository) method
Use 'strategy pattern' for assessor implementations where each assessor is independent and self-contained
Assessors must implement graceful degradation: return 'skipped' if tools are missing rather than crashing
Assessor remediation guidance must be actionable with steps, tools, commands, examples, and citations
Use CLAUDEmdAssessor and READMEAssessor as reference implementations when creating new assessors
Use calculate_proportional_score() for partial compliance scoring in assessors

Files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

Python source code must be formatted with Black, imports sorted with isort, and linted with Ruff before commit

Files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
src/**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

src/**/*.py: Use library-first architecture with no global state across all modules
Document all public APIs in docstrings with parameter descriptions, return types, and usage examples

Files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
🧠 Learnings (8)
📓 Common learnings
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : Use `CLAUDEmdAssessor` and `READMEAssessor` as reference implementations when creating new assessors
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : Use `CLAUDEmdAssessor` and `READMEAssessor` as reference implementations when creating new assessors

Applied to files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : Use 'strategy pattern' for assessor implementations where each assessor is independent and self-contained

Applied to files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : All new assessors must have unit tests with >80% code coverage maintained

Applied to files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : All new assessor classes must inherit from BaseAssessor and implement required methods: `attribute_id` property, `assess(repository)` method, and optional `is_applicable(repository)` method

Applied to files:

  • src/agentready/assessors/__init__.py
  • src/agentready/assessors/stub_assessors.py
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Read existing assessors before implementing new ones to understand patterns and avoid duplication

Applied to files:

  • src/agentready/assessors/__init__.py
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : Assessors must implement graceful degradation: return 'skipped' if tools are missing rather than crashing

Applied to files:

  • src/agentready/assessors/__init__.py
📚 Learning: 2025-11-25T15:15:10.808Z
Learnt from: CR
Repo: ambient-code/agentready PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-25T15:15:10.808Z
Learning: Applies to **/assessors/*.py : Assessor remediation guidance must be actionable with steps, tools, commands, examples, and citations

Applied to files:

  • src/agentready/assessors/stub_assessors.py
🧬 Code graph analysis (2)
src/agentready/assessors/__init__.py (1)
src/agentready/assessors/stub_assessors.py (1)
  • FileSizeLimitsAssessor (224-346)
src/agentready/assessors/stub_assessors.py (4)
src/agentready/assessors/base.py (1)
  • BaseAssessor (9-111)
src/agentready/models/attribute.py (1)
  • Attribute (7-51)
src/agentready/models/repository.py (1)
  • Repository (10-112)
src/agentready/models/finding.py (3)
  • Finding (50-158)
  • not_applicable (105-117)
  • Remediation (10-46)
🔇 Additional comments (3)
src/agentready/assessors/__init__.py (1)

31-31: LGTM! Clean integration of the new assessor.

The import, factory registration, and comment update correctly integrate FileSizeLimitsAssessor into the assessor creation pipeline, following the established patterns.

Also applies to: 62-68

src/agentready/assessors/stub_assessors.py (2)

224-246: LGTM! Class structure follows BaseAssessor pattern correctly.

The assessor inherits from BaseAssessor and implements all required properties (attribute_id, tier, attribute) with appropriate values for a Tier 2 Critical assessor.


326-343: LGTM! Remediation guidance is actionable.

The remediation provides concrete steps, tools, and a clear example showing how to split large files into smaller modules, following the coding guidelines for actionable remediation.

Comment on lines +224 to +347
class FileSizeLimitsAssessor(BaseAssessor):
"""Tier 2 - File size limits for context window optimization."""

@property
def attribute_id(self) -> str:
return "file_size_limits"

@property
def tier(self) -> int:
return 2

@property
def attribute(self) -> Attribute:
return Attribute(
id=self.attribute_id,
name="File Size Limits",
category="Context Window Optimization",
tier=self.tier,
description="Files are reasonably sized for AI context windows",
criteria="<5% of files >500 lines, no files >1000 lines",
default_weight=0.03,
)

def assess(self, repository: Repository) -> Finding:
"""Check for excessively large files that strain context windows.
Scoring:
- 100: All files <500 lines
- 75-99: Some files 500-1000 lines
- 0-74: Files >1000 lines exist
"""
# Count files by size
large_files = [] # 500-1000 lines
huge_files = [] # >1000 lines
total_files = 0

# Check common source file extensions
extensions = {".py", ".js", ".ts", ".jsx", ".tsx", ".go", ".java", ".rb", ".rs", ".cpp", ".c", ".h"}

for ext in extensions:
pattern = f"**/*{ext}"
try:
from pathlib import Path
for file_path in repository.path.glob(pattern):
if file_path.is_file():
try:
with open(file_path, "r", encoding="utf-8") as f:
lines = len(f.readlines())
total_files += 1

if lines > 1000:
huge_files.append((file_path.relative_to(repository.path), lines))
elif lines > 500:
large_files.append((file_path.relative_to(repository.path), lines))
except (OSError, UnicodeDecodeError):
# Skip files we can't read
pass
except Exception:
pass

if total_files == 0:
return Finding.not_applicable(
self.attribute,
reason="No source files found to assess",
)

# Calculate score
if huge_files:
# Penalty for files >1000 lines
percentage_huge = (len(huge_files) / total_files) * 100
score = max(0, 70 - (percentage_huge * 10))
status = "fail"
evidence = [
f"Found {len(huge_files)} files >1000 lines ({percentage_huge:.1f}% of {total_files} files)",
f"Largest: {huge_files[0][0]} ({huge_files[0][1]} lines)",
]
elif large_files:
# Partial credit for files 500-1000 lines
percentage_large = (len(large_files) / total_files) * 100
if percentage_large < 5:
score = 90
status = "pass"
else:
score = max(75, 100 - (percentage_large * 5))
status = "pass"

evidence = [
f"Found {len(large_files)} files 500-1000 lines ({percentage_large:.1f}% of {total_files} files)",
]
else:
# Perfect score
score = 100.0
status = "pass"
evidence = [f"All {total_files} source files are <500 lines"]

return Finding(
attribute=self.attribute,
status=status,
score=score,
measured_value=f"{len(huge_files)} huge, {len(large_files)} large out of {total_files}",
threshold="<5% files >500 lines, 0 files >1000 lines",
evidence=evidence,
remediation=(
None
if status == "pass"
else 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) → models/user.py, models/product.py, models/order.py"
],
citations=[],
)
),
error_message=None,
)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify unit tests exist for this new assessor.

The coding guidelines require "All new assessors must have unit tests with >80% code coverage maintained". No test file is visible in this PR for FileSizeLimitsAssessor.

Please run the following script to check if unit tests exist:

If tests don't exist, they should be added to meet the >80% coverage requirement. As per coding guidelines, use CLAUDEmdAssessor and READMEAssessor as reference implementations for test patterns.


🏁 Script executed:

#!/bin/bash
# Description: Check for unit tests for FileSizeLimitsAssessor

# Search for test files that reference FileSizeLimitsAssessor
rg -n "FileSizeLimitsAssessor" --type=py -g "*test*.py" -C 3

# Also check for test files in typical test directories
fd -e py -p "test.*file.*size" tests/ test/

Length of output: 51



🏁 Script executed:

#!/bin/bash
# Description: Locate test directories and check for FileSizeLimitsAssessor tests

# Find test directories in the repo
echo "=== Test directories ==="
fd -t d -n "test" | head -20

# Find all Python test files regardless of location
echo -e "\n=== All Python test files ==="
fd -e py -p "test_" | head -20

# Search for any file containing "FileSizeLimitsAssessor"
echo -e "\n=== Files mentioning FileSizeLimitsAssessor ==="
rg "FileSizeLimitsAssessor" --type=py -l

# Check if tests/assessors directory exists
echo -e "\n=== Check specific test paths ==="
ls -la tests/assessors/ 2>/dev/null || echo "tests/assessors/ not found"
ls -la src/agentready/assessors/test*.py 2>/dev/null || echo "No test files in assessors directory"

# Look for any test file related to stub_assessors or file_size
echo -e "\n=== Search for stub assessor tests ==="
rg "stub_assessor" --type=py -l
rg "FileSizeLimits\|file_size_limits" --type=py -l

Length of output: 1434



🏁 Script executed:

#!/bin/bash
# Description: Check for stub assessor or FileSizeLimitsAssessor tests in detail

# Check the test_assessors_structure.py file
echo "=== Content of test_assessors_structure.py ==="
cat tests/unit/test_assessors_structure.py | head -100

# Look for any test file that might test FileSizeLimitsAssessor or stub assessors
echo -e "\n=== Search for assessor test patterns ==="
rg "test.*FileSizeLimits|class.*FileSizeLimits|def.*file_size" --type=py

# Check testing.py to see what testing utilities are available
echo -e "\n=== First 50 lines of testing.py ==="
head -50 src/agentready/assessors/testing.py

# Look for any test file that imports stub_assessors
echo -e "\n=== Files that import stub_assessors ==="
rg "from.*stub_assessor|import.*stub_assessor" --type=py

# Check if there's a conftest or test configuration
echo -e "\n=== pytest configuration ==="
cat pytest.ini 2>/dev/null || echo "No pytest.ini found"
cat pyproject.toml 2>/dev/null | grep -A 20 "\[tool.pytest" || echo "No pytest config in pyproject.toml"

Length of output: 5639



🏁 Script executed:

#!/bin/bash
# Description: Final verification - check if stub_assessors.py has any test coverage

# Check if stub_assessors.py has pragma no cover or similar exclusions
echo "=== Check for coverage pragmas in stub_assessors.py ==="
rg "pragma: no cover|skip|xfail" src/agentready/assessors/stub_assessors.py

# Verify what stub assessors are exported from __init__.py
echo -e "\n=== Stub assessors exported ==="
rg "FileSizeLimits" src/agentready/assessors/__init__.py -A 5 -B 5

# Check overall test file count for assessors
echo -e "\n=== All test files matching assessor patterns ==="
fd -e py "test_" tests/ | rg -i assessor

Length of output: 878


Add unit tests for FileSizeLimitsAssessor to meet >80% coverage requirement.

The coding guidelines mandate "All new assessors must have unit tests with >80% code coverage maintained." The repository's pytest configuration enforces --cov-fail-under=90, which will cause CI to fail if this assessor lacks test coverage. Currently, no unit tests exist for FileSizeLimitsAssessor.

Create a test file (e.g., tests/unit/test_file_size_limits_assessor.py) following the pattern of test_assessors_structure.py. Test scenarios should include:

  • Files below 500 lines (100 score)
  • Files between 500-1000 lines (75-99 score)
  • Files exceeding 1000 lines (0-74 score)
  • No source files found (not_applicable)
  • Unreadable files (graceful degradation)

Reference CLAUDEmdAssessor and READMEAssessor test patterns per guidelines.

🤖 Prompt for AI Agents
In src/agentready/assessors/stub_assessors.py around lines 224-347, the
FileSizeLimitsAssessor has no unit tests and CI will fail due to coverage;
create tests/unit/test_file_size_limits_assessor.py that follows existing
assessor test patterns (e.g., CLAUDEmdAssessor), using pytest and tmp_path to
build a temporary repo directory and a minimal Repository-like object with a
.path attribute (Path) pointing to it, then cover these scenarios: (1) all
source files <500 lines — assert score == 100 and status == "pass"; (2) some
files 500-1000 lines — assert score in 75-99 and appropriate
measured_value/evidence; (3) files >1000 lines — assert score in 0-74, status
"fail", and evidence about huge files; (4) no source files — assert
Finding.not_applicable; (5) unreadable files — create a file and make it
unreadable (or mock open to raise UnicodeDecodeError/OSError) and assert
assessor skips it and still returns correct result; parametrize inputs where
useful and assert on measured_value, threshold, and remediation presence to
exercise all branches so coverage exceeds the required threshold.

Comment on lines +263 to +282
for ext in extensions:
pattern = f"**/*{ext}"
try:
from pathlib import Path
for file_path in repository.path.glob(pattern):
if file_path.is_file():
try:
with open(file_path, "r", encoding="utf-8") as f:
lines = len(f.readlines())
total_files += 1

if lines > 1000:
huge_files.append((file_path.relative_to(repository.path), lines))
elif lines > 500:
large_files.append((file_path.relative_to(repository.path), lines))
except (OSError, UnicodeDecodeError):
# Skip files we can't read
pass
except Exception:
pass
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Narrow exception handling to avoid hiding bugs.

The bare except Exception: on line 281 is too broad and can silently suppress programming errors, making debugging difficult. The inner exception handling (line 278) for file reading is appropriate, but the outer catch-all should be more specific or removed.

If the intent is to handle glob failures, be explicit:

         for ext in extensions:
             pattern = f"**/*{ext}"
             try:
-                from pathlib import Path
                 for file_path in repository.path.glob(pattern):
                     if file_path.is_file():
                         try:
                             with open(file_path, "r", encoding="utf-8") as f:
                                 lines = len(f.readlines())
                                 total_files += 1
 
                                 if lines > 1000:
                                     huge_files.append((file_path.relative_to(repository.path), lines))
                                 elif lines > 500:
                                     large_files.append((file_path.relative_to(repository.path), lines))
                         except (OSError, UnicodeDecodeError):
                             # Skip files we can't read
                             pass
-            except Exception:
-                pass
+            except (OSError, PermissionError) as e:
+                # Skip directories we can't access
+                continue
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
for ext in extensions:
pattern = f"**/*{ext}"
try:
from pathlib import Path
for file_path in repository.path.glob(pattern):
if file_path.is_file():
try:
with open(file_path, "r", encoding="utf-8") as f:
lines = len(f.readlines())
total_files += 1
if lines > 1000:
huge_files.append((file_path.relative_to(repository.path), lines))
elif lines > 500:
large_files.append((file_path.relative_to(repository.path), lines))
except (OSError, UnicodeDecodeError):
# Skip files we can't read
pass
except Exception:
pass
for ext in extensions:
pattern = f"**/*{ext}"
try:
for file_path in repository.path.glob(pattern):
if file_path.is_file():
try:
with open(file_path, "r", encoding="utf-8") as f:
lines = len(f.readlines())
total_files += 1
if lines > 1000:
huge_files.append((file_path.relative_to(repository.path), lines))
elif lines > 500:
large_files.append((file_path.relative_to(repository.path), lines))
except (OSError, UnicodeDecodeError):
# Skip files we can't read
pass
except (OSError, PermissionError):
# Skip directories we can't access
continue
🤖 Prompt for AI Agents
In src/agentready/assessors/stub_assessors.py around lines 263 to 282, remove
the broad `except Exception:` that silently swallows all errors; either delete
the outer try/except entirely or narrow it to the specific errors you expect
from the glob/Path operations (for example OSError and ValueError), and for any
caught cases log a brief debug/error message and allow unexpected exceptions to
propagate (re-raise) so real bugs aren’t hidden.

for ext in extensions:
pattern = f"**/*{ext}"
try:
from pathlib import Path
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Move import to module level.

Importing Path inside the loop is inefficient and unnecessary since pathlib is already available. The import should be at the top of the file with other imports.

Apply this diff to move the import:

 """Stub implementations for remaining assessors - minimal but functional.
 
 These are simplified implementations to get the MVP working. Each can be
 enhanced later with more sophisticated detection and scoring logic.
 """
 
+from pathlib import Path
+
 from ..models.attribute import Attribute
 from ..models.finding import Finding, Remediation

Then remove line 266 from the loop.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In src/agentready/assessors/stub_assessors.py around line 266, an import
statement "from pathlib import Path" is placed inside a loop; move that import
to the module-level top with the other imports (ensuring you don't duplicate it
if Path is already imported), then remove the in-loop import at line 266 so the
loop uses the module-level Path reference.

Comment on lines +291 to +318
if huge_files:
# Penalty for files >1000 lines
percentage_huge = (len(huge_files) / total_files) * 100
score = max(0, 70 - (percentage_huge * 10))
status = "fail"
evidence = [
f"Found {len(huge_files)} files >1000 lines ({percentage_huge:.1f}% of {total_files} files)",
f"Largest: {huge_files[0][0]} ({huge_files[0][1]} lines)",
]
elif large_files:
# Partial credit for files 500-1000 lines
percentage_large = (len(large_files) / total_files) * 100
if percentage_large < 5:
score = 90
status = "pass"
else:
score = max(75, 100 - (percentage_large * 5))
status = "pass"

evidence = [
f"Found {len(large_files)} files 500-1000 lines ({percentage_large:.1f}% of {total_files} files)",
]
else:
# Perfect score
score = 100.0
status = "pass"
evidence = [f"All {total_files} source files are <500 lines"]

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Consider using calculate_proportional_score() helper for consistency.

The custom scoring logic works but diverges from the framework's recommended calculate_proportional_score() helper method, which provides consistent, maintainable scoring across assessors.

Based on coding guidelines, assessors should use calculate_proportional_score() for partial compliance scoring.

Example refactor (after fixing the status logic):

# For repositories with huge files (>1000 lines)
if huge_files:
    percentage_huge = (len(huge_files) / total_files) * 100
    # Score degrades as percentage increases (lower is better)
    score = self.calculate_proportional_score(
        measured_value=percentage_huge,
        threshold=5.0,  # Allow up to 5% before severe penalty
        higher_is_better=False
    )
    score = min(score, 70)  # Cap at 70 for huge files
    status = "fail"
    # ... evidence ...

status = "fail"
evidence = [
f"Found {len(huge_files)} files >1000 lines ({percentage_huge:.1f}% of {total_files} files)",
f"Largest: {huge_files[0][0]} ({huge_files[0][1]} lines)",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Sort huge_files before reporting the largest.

Line 298 assumes huge_files[0] is the largest file, but the list is populated in discovery order, not sorted by size. This could report an arbitrary large file rather than the actual largest.

Apply this diff:

         if huge_files:
             # Penalty for files >1000 lines
+            huge_files.sort(key=lambda x: x[1], reverse=True)
             percentage_huge = (len(huge_files) / total_files) * 100
             score = max(0, 70 - (percentage_huge * 10))
             status = "fail"
             evidence = [
                 f"Found {len(huge_files)} files >1000 lines ({percentage_huge:.1f}% of {total_files} files)",
                 f"Largest: {huge_files[0][0]} ({huge_files[0][1]} lines)",
             ]
🤖 Prompt for AI Agents
In src/agentready/assessors/stub_assessors.py around line 298, the code assumes
huge_files[0] is the largest but the list is in discovery order; sort huge_files
by the size field (the second tuple element) in descending order before
accessing index 0, e.g. sort with key=lambda t: t[1], reverse=True, and also
handle the empty-list case safely (e.g., skip reporting or provide a fallback
message) so the reported "Largest" truly reflects the largest file.

Comment on lines +300 to +308
elif large_files:
# Partial credit for files 500-1000 lines
percentage_large = (len(large_files) / total_files) * 100
if percentage_large < 5:
score = 90
status = "pass"
else:
score = max(75, 100 - (percentage_large * 5))
status = "pass"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix status logic to match criteria.

The criteria states "<5% of files >500 lines", but when percentage_large >= 5%, the status remains "pass" (lines 307-308). This violates the stated criteria and will incorrectly report passing status for repositories that should fail.

Apply this diff:

         elif large_files:
             # Partial credit for files 500-1000 lines
             percentage_large = (len(large_files) / total_files) * 100
             if percentage_large < 5:
                 score = 90
                 status = "pass"
             else:
                 score = max(75, 100 - (percentage_large * 5))
-                status = "pass"
+                status = "warn"  # or "fail" depending on severity interpretation
 
             evidence = [
                 f"Found {len(large_files)} files 500-1000 lines ({percentage_large:.1f}% of {total_files} files)",
             ]

Note: The Finding model expects "pass", "fail", "skipped", "error", or "not_applicable" status values, so verify if "warn" is supported or use "fail" instead.

Committable suggestion skipped: line range outside the PR's diff.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +304 to +308
score = 90
status = "pass"
else:
score = max(75, 100 - (percentage_large * 5))
status = "pass"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fail when >5% of files exceed 500 lines

The FileSizeLimitsAssessor sets status = "pass" for any repository that only has 500–1000 line files, even when those files make up more than the stated threshold of 5% (percentage_large branch sets status to pass in both paths). Because the attribute criteria/threshold string says <5% files >500 lines, a repo with, for example, 30% of its files at ~800 lines will be marked passing and receive no remediation despite violating the stated limit, so oversized files silently slip through.

Useful? React with 👍 / 👎.

@jeremyeder jeremyeder merged commit 248467f into main Nov 25, 2025
18 of 19 checks passed
github-actions bot pushed a commit that referenced this pull request Nov 25, 2025
# [2.8.0](v2.7.1...v2.8.0) (2025-11-25)

### Features

* **assessors:** implement File Size Limits assessor (Tier 2) ([#141](#141)) ([248467f](248467f))
@github-actions
Copy link
Contributor

🎉 This PR is included in version 2.8.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

github-actions bot pushed a commit to chambridge/agentready that referenced this pull request Jan 14, 2026
# 1.0.0 (2026-01-14)

### Bug Fixes

* add bounded retry logic for LLM rate limit handling ([ambient-code#205](https://github.com/chambridge/agentready/issues/205)) ([6ecb786](6ecb786)), closes [ambient-code#104](https://github.com/chambridge/agentready/issues/104)
* Add comprehensive subprocess security guardrails (fixes [ambient-code#57](https://github.com/chambridge/agentready/issues/57)) ([ambient-code#66](https://github.com/chambridge/agentready/issues/66)) ([454b80e](454b80e))
* Add comprehensive YAML validation to prevent attacks (fixes [ambient-code#56](https://github.com/chambridge/agentready/issues/56)) ([ambient-code#63](https://github.com/chambridge/agentready/issues/63)) ([31ecb3a](31ecb3a))
* add repository checkout step to Claude Code Action workflow ([17aa0cf](17aa0cf))
* add uv.lock to recognized lockfiles ([ambient-code#143](https://github.com/chambridge/agentready/issues/143)) ([a98dc87](a98dc87)), closes [ambient-code#137](https://github.com/chambridge/agentready/issues/137)
* address P1 code quality issues from code review ([ambient-code#36](https://github.com/chambridge/agentready/issues/36)) ([5976332](5976332))
* address P1 code quality issues from code review ([ambient-code#37](https://github.com/chambridge/agentready/issues/37)) ([4be1d5e](4be1d5e))
* address P1 code quality issues from code review ([ambient-code#38](https://github.com/chambridge/agentready/issues/38)) ([77f2300](77f2300))
* **assessors:** search recursively for OpenAPI specification files ([ambient-code#127](https://github.com/chambridge/agentready/issues/127)) ([e2a5778](e2a5778))
* correct Assessment field name in demo command ([ambient-code#41](https://github.com/chambridge/agentready/issues/41)) ([b48622d](b48622d)), closes [ambient-code#12](https://github.com/chambridge/agentready/issues/12)
* Correct datetime import pattern in RepomixService ([ambient-code#65](https://github.com/chambridge/agentready/issues/65)) ([517aa6e](517aa6e))
* correct GitHub repository link in site navigation ([5492278](5492278))
* correct Liquid syntax in developer-guide (elif -> elsif) ([75f3b1d](75f3b1d))
* Create shared test fixtures and fix Assessment schema issues ([ambient-code#114](https://github.com/chambridge/agentready/issues/114)) ([46baa13](46baa13))
* disable attestations for Test PyPI to avoid conflict ([ambient-code#155](https://github.com/chambridge/agentready/issues/155)) ([a33e3cd](a33e3cd)), closes [pypa/#action-pypi-publish](https://github.com/chambridge/agentready/issues/action-pypi-publish)
* downgrade docker/metadata-action to v5 and fix shellcheck warnings ([12f5509](12f5509))
* enable Harbor task filtering for smoketest support ([ambient-code#222](https://github.com/chambridge/agentready/issues/222)) ([f780188](f780188))
* exclude DEPLOYMENT.md and SETUP_SUMMARY.md from Jekyll build ([9611207](9611207))
* Improve report metadata display with clean table format ([ca361a4](ca361a4))
* leaderboard workflow and SSH URL support ([ambient-code#147](https://github.com/chambridge/agentready/issues/147)) ([de28cd0](de28cd0))
* make E2E test timeouts configurable and add sensitive directory test ([ambient-code#206](https://github.com/chambridge/agentready/issues/206)) ([27e87e5](27e87e5)), closes [ambient-code#104](https://github.com/chambridge/agentready/issues/104) [ambient-code#192](https://github.com/chambridge/agentready/issues/192)
* P0 security and logic bugs from code review ([2af2346](2af2346))
* Prevent API key exposure in environment and logs (fixes [ambient-code#55](https://github.com/chambridge/agentready/issues/55)) ([ambient-code#64](https://github.com/chambridge/agentready/issues/64)) ([4d1d001](4d1d001))
* Prevent command injection in CommandFix.apply() (fixes [ambient-code#52](https://github.com/chambridge/agentready/issues/52)) ([ambient-code#60](https://github.com/chambridge/agentready/issues/60)) ([49be28e](49be28e))
* Prevent path traversal in LLM cache (fixes [ambient-code#53](https://github.com/chambridge/agentready/issues/53)) ([ambient-code#61](https://github.com/chambridge/agentready/issues/61)) ([2bf052d](2bf052d))
* Prevent XSS in HTML reports (fixes [ambient-code#54](https://github.com/chambridge/agentready/issues/54)) ([ambient-code#62](https://github.com/chambridge/agentready/issues/62)) ([7c60c69](7c60c69))
* rename research report in data directory ([b8ddfdc](b8ddfdc))
* replace all remaining elif with elsif in developer-guide ([73f16fc](73f16fc))
* Resolve 35 pytest failures through model validation and path sanitization improvements ([ambient-code#115](https://github.com/chambridge/agentready/issues/115)) ([4fbfee0](4fbfee0))
* resolve all test suite failures - achieve zero failures ([ambient-code#180](https://github.com/chambridge/agentready/issues/180)) ([990fa2d](990fa2d)), closes [ambient-code#148](https://github.com/chambridge/agentready/issues/148) [ambient-code#147](https://github.com/chambridge/agentready/issues/147) [ambient-code#145](https://github.com/chambridge/agentready/issues/145)
* resolve broken links and workflow failures ([ambient-code#160](https://github.com/chambridge/agentready/issues/160)) ([fbf5cf7](fbf5cf7))
* Resolve merge conflicts in CLI main module ([ambient-code#59](https://github.com/chambridge/agentready/issues/59)) ([9e0bf2d](9e0bf2d))
* resolve YAML syntax error in continuous-learning workflow ([ambient-code#172](https://github.com/chambridge/agentready/issues/172)) ([3d40fcc](3d40fcc))
* resolve YAML syntax error in update-docs workflow and add actionlint ([ambient-code#173](https://github.com/chambridge/agentready/issues/173)) ([97b06af](97b06af))
* Sanitize sensitive data in HTML reports (fixes [ambient-code#58](https://github.com/chambridge/agentready/issues/58)) ([ambient-code#67](https://github.com/chambridge/agentready/issues/67)) ([6fbac76](6fbac76))
* set correct baseurl for GitHub Pages subdirectory deployment ([c4db765](c4db765))
* skip PR comments for external forks to prevent permission errors ([ambient-code#163](https://github.com/chambridge/agentready/issues/163)) ([2a29fb8](2a29fb8))
* update --version flag to show correct version and research report date ([ambient-code#221](https://github.com/chambridge/agentready/issues/221)) ([5a85abb](5a85abb))
* Update Claude workflow to trigger on [@claude](https://github.com/claude) mentions ([ambient-code#35](https://github.com/chambridge/agentready/issues/35)) ([a8a3fab](a8a3fab))
* **workflows:** ensure post-comment step runs after Claude Code Action ([b087e5c](b087e5c))
* **workflows:** handle all event types in agentready-dev workflow ([9b942bf](9b942bf))
* **workflows:** improve error handling and logging for comment posting ([9ea1e6b](9ea1e6b))
* **workflows:** improve issue number extraction and add debug step ([ecd896b](ecd896b))
* **workflows:** remove if:always() to test step execution ([ff0bb12](ff0bb12))
* **workflows:** simplify post-comment step condition ([1bbf40a](1bbf40a))

### Features

* add agentready-dev Claude agent specification ([ambient-code#44](https://github.com/chambridge/agentready/issues/44)) ([0f61f5c](0f61f5c))
* add ambient-code/agentready to leaderboard ([ambient-code#148](https://github.com/chambridge/agentready/issues/148)) ([621152e](621152e))
* Add automated demo command for AgentReady ([ambient-code#24](https://github.com/chambridge/agentready/issues/24)) ([f4e89d9](f4e89d9)), closes [ambient-code#1](https://github.com/chambridge/agentready/issues/1) [ambient-code#25](https://github.com/chambridge/agentready/issues/25) [hi#quality](https://github.com/hi/issues/quality) [hi#scoring](https://github.com/hi/issues/scoring)
* add Claude Code GitHub Action for [@claude](https://github.com/claude) mentions ([3e7224d](3e7224d))
* Add comprehensive unit tests for utility modules (privacy.py and subprocess_utils.py) ([ambient-code#111](https://github.com/chambridge/agentready/issues/111)) ([9d3dece](9d3dece))
* Add customizable HTML report themes with runtime switching ([ambient-code#46](https://github.com/chambridge/agentready/issues/46)) ([7eeaf84](7eeaf84)), closes [hi#contrast](https://github.com/hi/issues/contrast) [ambient-code#10](https://github.com/chambridge/agentready/issues/10)
* Add Doubleagent - specialized AgentReady development agent ([ambient-code#30](https://github.com/chambridge/agentready/issues/30)) ([0ab54cb](0ab54cb))
* add GitHub organization scanning to assess-batch command ([ambient-code#118](https://github.com/chambridge/agentready/issues/118)) ([e306314](e306314))
* add Harbor Terminal-Bench comparison for agent effectiveness ([ambient-code#199](https://github.com/chambridge/agentready/issues/199)) ([a56e318](a56e318))
* Add Interactive Dashboard backlog item ([adfc4c8](adfc4c8))
* add interactive heatmap visualization for batch assessments ([ambient-code#136](https://github.com/chambridge/agentready/issues/136)) ([4d44fc3](4d44fc3))
* Add interactive HTML report generation ([18664ea](18664ea))
* add Memory MCP server allow list to repository settings ([ambient-code#203](https://github.com/chambridge/agentready/issues/203)) ([41d87bb](41d87bb))
* add quay/quay to leaderboard ([ambient-code#162](https://github.com/chambridge/agentready/issues/162)) ([d6e8df0](d6e8df0))
* add release pipeline coldstart prompt ([ambient-code#19](https://github.com/chambridge/agentready/issues/19)) ([9a3880c](9a3880c)), closes [ambient-code#18](https://github.com/chambridge/agentready/issues/18)
* Add Repomix integration for AI-friendly repository context generation ([ambient-code#29](https://github.com/chambridge/agentready/issues/29)) ([92bdde1](92bdde1)), closes [ambient-code#24](https://github.com/chambridge/agentready/issues/24) [ambient-code#1](https://github.com/chambridge/agentready/issues/1) [ambient-code#25](https://github.com/chambridge/agentready/issues/25) [hi#quality](https://github.com/hi/issues/quality) [hi#scoring](https://github.com/hi/issues/scoring)
* add report header with repository metadata ([ambient-code#28](https://github.com/chambridge/agentready/issues/28)) ([7a8b34a](7a8b34a))
* Add research report management CLI commands ([ambient-code#45](https://github.com/chambridge/agentready/issues/45)) ([e1be488](e1be488)), closes [ambient-code#7](https://github.com/chambridge/agentready/issues/7)
* Add security & quality improvements from code review ([ambient-code#40](https://github.com/chambridge/agentready/issues/40)) ([13cd3ca](13cd3ca))
* Add security & quality improvements from code review ([ambient-code#49](https://github.com/chambridge/agentready/issues/49)) ([889d6ed](889d6ed))
* Add SWE-bench experiment system for validating AgentReady impact ([ambient-code#124](https://github.com/chambridge/agentready/issues/124)) ([15edbba](15edbba))
* Add weekly research update skill and automation ([ambient-code#145](https://github.com/chambridge/agentready/issues/145)) ([7ba17a6](7ba17a6))
* **assessors:** implement File Size Limits assessor (Tier 2) ([ambient-code#141](https://github.com/chambridge/agentready/issues/141)) ([248467f](248467f))
* Auto-sync CLAUDE.md during semantic-release ([ambient-code#101](https://github.com/chambridge/agentready/issues/101)) ([36b48cb](36b48cb))
* automate PyPI publishing with trusted publishing (OIDC) ([ambient-code#154](https://github.com/chambridge/agentready/issues/154)) ([71f4632](71f4632)), closes [pypa/#action-pypi-publish](https://github.com/chambridge/agentready/issues/action-pypi-publish)
* Batch Report Enhancements + Bootstrap Template Inheritance (Phase 2 Task 5) ([ambient-code#133](https://github.com/chambridge/agentready/issues/133)) ([7762b23](7762b23))
* Community Leaderboard for AgentReady Scores ([ambient-code#146](https://github.com/chambridge/agentready/issues/146)) ([fea0b3e](fea0b3e))
* Complete Phases 5-7 - Markdown reports, testing, and polish ([7659623](7659623))
* consolidate GitHub Actions workflows by purpose ([ambient-code#217](https://github.com/chambridge/agentready/issues/217)) ([717ca6b](717ca6b)), closes [ambient-code#221](https://github.com/chambridge/agentready/issues/221)
* container support ([ambient-code#171](https://github.com/chambridge/agentready/issues/171)) ([c6874ea](c6874ea))
* convert AgentReady assessment to on-demand workflow ([ambient-code#213](https://github.com/chambridge/agentready/issues/213)) ([b5a1ce0](b5a1ce0)), closes [ambient-code#191](https://github.com/chambridge/agentready/issues/191)
* enhance assessors with multi-language support and security ([ambient-code#200](https://github.com/chambridge/agentready/issues/200)) ([85712f2](85712f2)), closes [ambient-code#10](https://github.com/chambridge/agentready/issues/10)
* Harbor framework integration for Terminal-Bench evaluations ([ambient-code#202](https://github.com/chambridge/agentready/issues/202)) ([d73a8c8](d73a8c8)), closes [ambient-code#4](https://github.com/chambridge/agentready/issues/4) [ambient-code#178](https://github.com/chambridge/agentready/issues/178) [ambient-code#178](https://github.com/chambridge/agentready/issues/178)
* Implement AgentReady MVP with scoring engine ([54a96cb](54a96cb))
* Implement align subcommand for automated remediation (Issue [ambient-code#14](https://github.com/chambridge/agentready/issues/14)) ([ambient-code#34](https://github.com/chambridge/agentready/issues/34)) ([06f04dc](06f04dc))
* Implement ArchitectureDecisionsAssessor (fixes [ambient-code#81](https://github.com/chambridge/agentready/issues/81)) ([ambient-code#89](https://github.com/chambridge/agentready/issues/89)) ([9e782e5](9e782e5))
* implement automated semantic release pipeline ([ambient-code#20](https://github.com/chambridge/agentready/issues/20)) ([b579235](b579235))
* implement bootstrap command for GitHub infrastructure ([0af06c4](0af06c4)), closes [ambient-code#2](https://github.com/chambridge/agentready/issues/2)
* Implement BranchProtectionAssessor stub (fixes [ambient-code#86](https://github.com/chambridge/agentready/issues/86)) ([ambient-code#98](https://github.com/chambridge/agentready/issues/98)) ([44c4b17](44c4b17))
* Implement CICDPipelineVisibilityAssessor (fixes [ambient-code#85](https://github.com/chambridge/agentready/issues/85)) ([ambient-code#91](https://github.com/chambridge/agentready/issues/91)) ([e68285c](e68285c))
* Implement CodeSmellsAssessor stub (fixes [ambient-code#87](https://github.com/chambridge/agentready/issues/87)) ([ambient-code#99](https://github.com/chambridge/agentready/issues/99)) ([f06b2a8](f06b2a8))
* Implement ConciseDocumentationAssessor (fixes [ambient-code#76](https://github.com/chambridge/agentready/issues/76)) ([ambient-code#93](https://github.com/chambridge/agentready/issues/93)) ([c356cd5](c356cd5))
* Implement InlineDocumentationAssessor (fixes [ambient-code#77](https://github.com/chambridge/agentready/issues/77)) ([ambient-code#94](https://github.com/chambridge/agentready/issues/94)) ([e56e570](e56e570))
* Implement IssuePRTemplatesAssessor (fixes [ambient-code#84](https://github.com/chambridge/agentready/issues/84)) ([ambient-code#90](https://github.com/chambridge/agentready/issues/90)) ([819d7b7](819d7b7))
* Implement multi-repository batch assessment (Phase 1 of issue [ambient-code#68](https://github.com/chambridge/agentready/issues/68)) ([ambient-code#74](https://github.com/chambridge/agentready/issues/74)) ([befc0d5](befc0d5))
* Implement OneCommandSetupAssessor (fixes [ambient-code#75](https://github.com/chambridge/agentready/issues/75)) ([ambient-code#88](https://github.com/chambridge/agentready/issues/88)) ([668ba1b](668ba1b))
* Implement OpenAPISpecsAssessor (fixes [ambient-code#80](https://github.com/chambridge/agentready/issues/80)) ([ambient-code#97](https://github.com/chambridge/agentready/issues/97)) ([45ae36e](45ae36e))
* implement Phase 2 multi-repository assessment reporting ([ambient-code#117](https://github.com/chambridge/agentready/issues/117)) ([8da56c2](8da56c2)), closes [ambient-code#69](https://github.com/chambridge/agentready/issues/69)
* implement report schema versioning ([ambient-code#43](https://github.com/chambridge/agentready/issues/43)) ([4c4752c](4c4752c))
* Implement SemanticNamingAssessor (fixes [ambient-code#82](https://github.com/chambridge/agentready/issues/82)) ([ambient-code#95](https://github.com/chambridge/agentready/issues/95)) ([d87a280](d87a280))
* Implement SeparationOfConcernsAssessor (fixes [ambient-code#78](https://github.com/chambridge/agentready/issues/78)) ([ambient-code#92](https://github.com/chambridge/agentready/issues/92)) ([99bfe28](99bfe28))
* Implement StructuredLoggingAssessor (fixes [ambient-code#79](https://github.com/chambridge/agentready/issues/79)) ([ambient-code#96](https://github.com/chambridge/agentready/issues/96)) ([2b87ca7](2b87ca7))
* Phase 1 Task 1 - Consolidate Security Validation Patterns ([ambient-code#129](https://github.com/chambridge/agentready/issues/129)) ([8580c45](8580c45)), closes [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122)
* Phase 1 Tasks 2-3 - Consolidate Reporter Base & Assessor Factory ([ambient-code#131](https://github.com/chambridge/agentready/issues/131)) ([8e12bf9](8e12bf9)), closes [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122)
* Phase 2 Task 4 - Replace manual config validation with Pydantic ([ambient-code#134](https://github.com/chambridge/agentready/issues/134)) ([d83cf58](d83cf58))
* Redesign homepage features with two-column layout and research links ([ambient-code#189](https://github.com/chambridge/agentready/issues/189)) ([570087d](570087d)), closes [ambient-code#187](https://github.com/chambridge/agentready/issues/187)
* redesign HTML report with dark theme and larger fonts ([ambient-code#39](https://github.com/chambridge/agentready/issues/39)) ([59f6702](59f6702)), closes [#8b5cf6](https://github.com/chambridge/agentready/issues/8b5cf6) [#XX](https://github.com/chambridge/agentready/issues/XX)
* Rename 'learn' command to 'extract-skills' for clarity ([ambient-code#125](https://github.com/chambridge/agentready/issues/125)) ([64d6563](64d6563)), closes [hi#scoring](https://github.com/hi/issues/scoring) [ambient-code#123](https://github.com/chambridge/agentready/issues/123)
* replace markdown-link-check with lychee for link validation ([ambient-code#177](https://github.com/chambridge/agentready/issues/177)) ([f1a4545](f1a4545))
* Standardize on Python 3.12+ with forward compatibility for 3.13 ([ambient-code#132](https://github.com/chambridge/agentready/issues/132)) ([84f2c46](84f2c46))
* Terminal-Bench eval harness (MVP Phase 1) ([ambient-code#178](https://github.com/chambridge/agentready/issues/178)) ([d06bab4](d06bab4)), closes [ambient-code#171](https://github.com/chambridge/agentready/issues/171)
* **workflows:** add comment posting for [@agentready-dev](https://github.com/agentready-dev) agent ([5dff614](5dff614))

### Performance Improvements

* implement lazy loading for heavy CLI commands ([ambient-code#151](https://github.com/chambridge/agentready/issues/151)) ([6a7cd4e](6a7cd4e))

### BREAKING CHANGES

* Users must update scripts from 'agentready learn'
to 'agentready extract-skills'. All flags and options remain identical.
github-actions bot pushed a commit to chambridge/agentready that referenced this pull request Jan 16, 2026
# 1.0.0 (2026-01-16)

### Bug Fixes

* add bounded retry logic for LLM rate limit handling ([ambient-code#205](https://github.com/chambridge/agentready/issues/205)) ([6ecb786](6ecb786)), closes [ambient-code#104](https://github.com/chambridge/agentready/issues/104)
* Add comprehensive subprocess security guardrails (fixes [ambient-code#57](https://github.com/chambridge/agentready/issues/57)) ([ambient-code#66](https://github.com/chambridge/agentready/issues/66)) ([454b80e](454b80e))
* Add comprehensive YAML validation to prevent attacks (fixes [ambient-code#56](https://github.com/chambridge/agentready/issues/56)) ([ambient-code#63](https://github.com/chambridge/agentready/issues/63)) ([31ecb3a](31ecb3a))
* add repository checkout step to Claude Code Action workflow ([17aa0cf](17aa0cf))
* add uv.lock to recognized lockfiles ([ambient-code#143](https://github.com/chambridge/agentready/issues/143)) ([a98dc87](a98dc87)), closes [ambient-code#137](https://github.com/chambridge/agentready/issues/137)
* address P1 code quality issues from code review ([ambient-code#36](https://github.com/chambridge/agentready/issues/36)) ([5976332](5976332))
* address P1 code quality issues from code review ([ambient-code#37](https://github.com/chambridge/agentready/issues/37)) ([4be1d5e](4be1d5e))
* address P1 code quality issues from code review ([ambient-code#38](https://github.com/chambridge/agentready/issues/38)) ([77f2300](77f2300))
* **assessors:** FileSizeLimitsAssessor now respects .gitignore ([ambient-code#248](https://github.com/chambridge/agentready/issues/248)) ([eaaecc2](eaaecc2)), closes [ambient-code#245](https://github.com/chambridge/agentready/issues/245)
* **assessors:** search recursively for OpenAPI specification files ([ambient-code#127](https://github.com/chambridge/agentready/issues/127)) ([e2a5778](e2a5778))
* **ci:** use gh pr view for fork PR number lookup in coverage comment ([ambient-code#253](https://github.com/chambridge/agentready/issues/253)) ([1688362](1688362))
* correct Assessment field name in demo command ([ambient-code#41](https://github.com/chambridge/agentready/issues/41)) ([b48622d](b48622d)), closes [ambient-code#12](https://github.com/chambridge/agentready/issues/12)
* Correct datetime import pattern in RepomixService ([ambient-code#65](https://github.com/chambridge/agentready/issues/65)) ([517aa6e](517aa6e))
* correct GitHub repository link in site navigation ([5492278](5492278))
* correct Liquid syntax in developer-guide (elif -> elsif) ([75f3b1d](75f3b1d))
* Create shared test fixtures and fix Assessment schema issues ([ambient-code#114](https://github.com/chambridge/agentready/issues/114)) ([46baa13](46baa13))
* disable attestations for Test PyPI to avoid conflict ([ambient-code#155](https://github.com/chambridge/agentready/issues/155)) ([a33e3cd](a33e3cd)), closes [pypa/#action-pypi-publish](https://github.com/chambridge/agentready/issues/action-pypi-publish)
* downgrade docker/metadata-action to v5 and fix shellcheck warnings ([12f5509](12f5509))
* enable Harbor task filtering for smoketest support ([ambient-code#222](https://github.com/chambridge/agentready/issues/222)) ([f780188](f780188))
* exclude DEPLOYMENT.md and SETUP_SUMMARY.md from Jekyll build ([9611207](9611207))
* Improve report metadata display with clean table format ([ca361a4](ca361a4))
* leaderboard workflow and SSH URL support ([ambient-code#147](https://github.com/chambridge/agentready/issues/147)) ([de28cd0](de28cd0))
* make E2E test timeouts configurable and add sensitive directory test ([ambient-code#206](https://github.com/chambridge/agentready/issues/206)) ([27e87e5](27e87e5)), closes [ambient-code#104](https://github.com/chambridge/agentready/issues/104) [ambient-code#192](https://github.com/chambridge/agentready/issues/192)
* P0 security and logic bugs from code review ([2af2346](2af2346))
* Prevent API key exposure in environment and logs (fixes [ambient-code#55](https://github.com/chambridge/agentready/issues/55)) ([ambient-code#64](https://github.com/chambridge/agentready/issues/64)) ([4d1d001](4d1d001))
* Prevent command injection in CommandFix.apply() (fixes [ambient-code#52](https://github.com/chambridge/agentready/issues/52)) ([ambient-code#60](https://github.com/chambridge/agentready/issues/60)) ([49be28e](49be28e))
* Prevent path traversal in LLM cache (fixes [ambient-code#53](https://github.com/chambridge/agentready/issues/53)) ([ambient-code#61](https://github.com/chambridge/agentready/issues/61)) ([2bf052d](2bf052d))
* prevent unauthorized message for non-command comments ([ambient-code#262](https://github.com/chambridge/agentready/issues/262)) ([84c6f69](84c6f69))
* Prevent XSS in HTML reports (fixes [ambient-code#54](https://github.com/chambridge/agentready/issues/54)) ([ambient-code#62](https://github.com/chambridge/agentready/issues/62)) ([7c60c69](7c60c69))
* rename research report in data directory ([b8ddfdc](b8ddfdc))
* replace all remaining elif with elsif in developer-guide ([73f16fc](73f16fc))
* Resolve 35 pytest failures through model validation and path sanitization improvements ([ambient-code#115](https://github.com/chambridge/agentready/issues/115)) ([4fbfee0](4fbfee0))
* resolve all test suite failures - achieve zero failures ([ambient-code#180](https://github.com/chambridge/agentready/issues/180)) ([990fa2d](990fa2d)), closes [ambient-code#148](https://github.com/chambridge/agentready/issues/148) [ambient-code#147](https://github.com/chambridge/agentready/issues/147) [ambient-code#145](https://github.com/chambridge/agentready/issues/145)
* resolve broken links and workflow failures ([ambient-code#160](https://github.com/chambridge/agentready/issues/160)) ([fbf5cf7](fbf5cf7))
* Resolve merge conflicts in CLI main module ([ambient-code#59](https://github.com/chambridge/agentready/issues/59)) ([9e0bf2d](9e0bf2d))
* resolve YAML syntax error in continuous-learning workflow ([ambient-code#172](https://github.com/chambridge/agentready/issues/172)) ([3d40fcc](3d40fcc))
* resolve YAML syntax error in update-docs workflow and add actionlint ([ambient-code#173](https://github.com/chambridge/agentready/issues/173)) ([97b06af](97b06af))
* Sanitize sensitive data in HTML reports (fixes [ambient-code#58](https://github.com/chambridge/agentready/issues/58)) ([ambient-code#67](https://github.com/chambridge/agentready/issues/67)) ([6fbac76](6fbac76))
* set correct baseurl for GitHub Pages subdirectory deployment ([c4db765](c4db765))
* skip PR comments for external forks to prevent permission errors ([ambient-code#163](https://github.com/chambridge/agentready/issues/163)) ([2a29fb8](2a29fb8))
* update --version flag to show correct version and research report date ([ambient-code#221](https://github.com/chambridge/agentready/issues/221)) ([5a85abb](5a85abb))
* Update Claude workflow to trigger on [@claude](https://github.com/claude) mentions ([ambient-code#35](https://github.com/chambridge/agentready/issues/35)) ([a8a3fab](a8a3fab))
* **workflows:** ensure post-comment step runs after Claude Code Action ([b087e5c](b087e5c))
* **workflows:** handle all event types in agentready-dev workflow ([9b942bf](9b942bf))
* **workflows:** improve error handling and logging for comment posting ([9ea1e6b](9ea1e6b))
* **workflows:** improve issue number extraction and add debug step ([ecd896b](ecd896b))
* **workflows:** remove if:always() to test step execution ([ff0bb12](ff0bb12))
* **workflows:** simplify post-comment step condition ([1bbf40a](1bbf40a))

### Features

* add agentready-dev Claude agent specification ([ambient-code#44](https://github.com/chambridge/agentready/issues/44)) ([0f61f5c](0f61f5c))
* add ambient-code/agentready to leaderboard ([ambient-code#148](https://github.com/chambridge/agentready/issues/148)) ([621152e](621152e))
* Add automated demo command for AgentReady ([ambient-code#24](https://github.com/chambridge/agentready/issues/24)) ([f4e89d9](f4e89d9)), closes [ambient-code#1](https://github.com/chambridge/agentready/issues/1) [ambient-code#25](https://github.com/chambridge/agentready/issues/25) [hi#quality](https://github.com/hi/issues/quality) [hi#scoring](https://github.com/hi/issues/scoring)
* add Claude Code GitHub Action for [@claude](https://github.com/claude) mentions ([3e7224d](3e7224d))
* Add comprehensive unit tests for utility modules (privacy.py and subprocess_utils.py) ([ambient-code#111](https://github.com/chambridge/agentready/issues/111)) ([9d3dece](9d3dece))
* Add customizable HTML report themes with runtime switching ([ambient-code#46](https://github.com/chambridge/agentready/issues/46)) ([7eeaf84](7eeaf84)), closes [hi#contrast](https://github.com/hi/issues/contrast) [ambient-code#10](https://github.com/chambridge/agentready/issues/10)
* Add Doubleagent - specialized AgentReady development agent ([ambient-code#30](https://github.com/chambridge/agentready/issues/30)) ([0ab54cb](0ab54cb))
* add GitHub organization scanning to assess-batch command ([ambient-code#118](https://github.com/chambridge/agentready/issues/118)) ([e306314](e306314))
* add Harbor Terminal-Bench comparison for agent effectiveness ([ambient-code#199](https://github.com/chambridge/agentready/issues/199)) ([a56e318](a56e318))
* Add Interactive Dashboard backlog item ([adfc4c8](adfc4c8))
* add interactive heatmap visualization for batch assessments ([ambient-code#136](https://github.com/chambridge/agentready/issues/136)) ([4d44fc3](4d44fc3))
* Add interactive HTML report generation ([18664ea](18664ea))
* add Memory MCP server allow list to repository settings ([ambient-code#203](https://github.com/chambridge/agentready/issues/203)) ([41d87bb](41d87bb))
* add quay/quay to leaderboard ([ambient-code#162](https://github.com/chambridge/agentready/issues/162)) ([d6e8df0](d6e8df0))
* add release pipeline coldstart prompt ([ambient-code#19](https://github.com/chambridge/agentready/issues/19)) ([9a3880c](9a3880c)), closes [ambient-code#18](https://github.com/chambridge/agentready/issues/18)
* Add Repomix integration for AI-friendly repository context generation ([ambient-code#29](https://github.com/chambridge/agentready/issues/29)) ([92bdde1](92bdde1)), closes [ambient-code#24](https://github.com/chambridge/agentready/issues/24) [ambient-code#1](https://github.com/chambridge/agentready/issues/1) [ambient-code#25](https://github.com/chambridge/agentready/issues/25) [hi#quality](https://github.com/hi/issues/quality) [hi#scoring](https://github.com/hi/issues/scoring)
* add report header with repository metadata ([ambient-code#28](https://github.com/chambridge/agentready/issues/28)) ([7a8b34a](7a8b34a))
* Add research report management CLI commands ([ambient-code#45](https://github.com/chambridge/agentready/issues/45)) ([e1be488](e1be488)), closes [ambient-code#7](https://github.com/chambridge/agentready/issues/7)
* Add security & quality improvements from code review ([ambient-code#40](https://github.com/chambridge/agentready/issues/40)) ([13cd3ca](13cd3ca))
* Add security & quality improvements from code review ([ambient-code#49](https://github.com/chambridge/agentready/issues/49)) ([889d6ed](889d6ed))
* Add SWE-bench experiment system for validating AgentReady impact ([ambient-code#124](https://github.com/chambridge/agentready/issues/124)) ([15edbba](15edbba))
* Add weekly research update skill and automation ([ambient-code#145](https://github.com/chambridge/agentready/issues/145)) ([7ba17a6](7ba17a6))
* **assessors:** implement File Size Limits assessor (Tier 2) ([ambient-code#141](https://github.com/chambridge/agentready/issues/141)) ([248467f](248467f))
* Auto-sync CLAUDE.md during semantic-release ([ambient-code#101](https://github.com/chambridge/agentready/issues/101)) ([36b48cb](36b48cb))
* automate PyPI publishing with trusted publishing (OIDC) ([ambient-code#154](https://github.com/chambridge/agentready/issues/154)) ([71f4632](71f4632)), closes [pypa/#action-pypi-publish](https://github.com/chambridge/agentready/issues/action-pypi-publish)
* Batch Report Enhancements + Bootstrap Template Inheritance (Phase 2 Task 5) ([ambient-code#133](https://github.com/chambridge/agentready/issues/133)) ([7762b23](7762b23))
* Community Leaderboard for AgentReady Scores ([ambient-code#146](https://github.com/chambridge/agentready/issues/146)) ([fea0b3e](fea0b3e))
* Complete Phases 5-7 - Markdown reports, testing, and polish ([7659623](7659623))
* consolidate GitHub Actions workflows by purpose ([ambient-code#217](https://github.com/chambridge/agentready/issues/217)) ([717ca6b](717ca6b)), closes [ambient-code#221](https://github.com/chambridge/agentready/issues/221)
* container support ([ambient-code#171](https://github.com/chambridge/agentready/issues/171)) ([c6874ea](c6874ea))
* convert AgentReady assessment to on-demand workflow ([ambient-code#213](https://github.com/chambridge/agentready/issues/213)) ([b5a1ce0](b5a1ce0)), closes [ambient-code#191](https://github.com/chambridge/agentready/issues/191)
* enhance assessors with multi-language support and security ([ambient-code#200](https://github.com/chambridge/agentready/issues/200)) ([85712f2](85712f2)), closes [ambient-code#10](https://github.com/chambridge/agentready/issues/10)
* Harbor framework integration for Terminal-Bench evaluations ([ambient-code#202](https://github.com/chambridge/agentready/issues/202)) ([d73a8c8](d73a8c8)), closes [ambient-code#4](https://github.com/chambridge/agentready/issues/4) [ambient-code#178](https://github.com/chambridge/agentready/issues/178) [ambient-code#178](https://github.com/chambridge/agentready/issues/178)
* Implement AgentReady MVP with scoring engine ([54a96cb](54a96cb))
* Implement align subcommand for automated remediation (Issue [ambient-code#14](https://github.com/chambridge/agentready/issues/14)) ([ambient-code#34](https://github.com/chambridge/agentready/issues/34)) ([06f04dc](06f04dc))
* Implement ArchitectureDecisionsAssessor (fixes [ambient-code#81](https://github.com/chambridge/agentready/issues/81)) ([ambient-code#89](https://github.com/chambridge/agentready/issues/89)) ([9e782e5](9e782e5))
* implement automated semantic release pipeline ([ambient-code#20](https://github.com/chambridge/agentready/issues/20)) ([b579235](b579235))
* implement bootstrap command for GitHub infrastructure ([0af06c4](0af06c4)), closes [ambient-code#2](https://github.com/chambridge/agentready/issues/2)
* Implement BranchProtectionAssessor stub (fixes [ambient-code#86](https://github.com/chambridge/agentready/issues/86)) ([ambient-code#98](https://github.com/chambridge/agentready/issues/98)) ([44c4b17](44c4b17))
* Implement CICDPipelineVisibilityAssessor (fixes [ambient-code#85](https://github.com/chambridge/agentready/issues/85)) ([ambient-code#91](https://github.com/chambridge/agentready/issues/91)) ([e68285c](e68285c))
* Implement CodeSmellsAssessor stub (fixes [ambient-code#87](https://github.com/chambridge/agentready/issues/87)) ([ambient-code#99](https://github.com/chambridge/agentready/issues/99)) ([f06b2a8](f06b2a8))
* Implement ConciseDocumentationAssessor (fixes [ambient-code#76](https://github.com/chambridge/agentready/issues/76)) ([ambient-code#93](https://github.com/chambridge/agentready/issues/93)) ([c356cd5](c356cd5))
* Implement InlineDocumentationAssessor (fixes [ambient-code#77](https://github.com/chambridge/agentready/issues/77)) ([ambient-code#94](https://github.com/chambridge/agentready/issues/94)) ([e56e570](e56e570))
* Implement IssuePRTemplatesAssessor (fixes [ambient-code#84](https://github.com/chambridge/agentready/issues/84)) ([ambient-code#90](https://github.com/chambridge/agentready/issues/90)) ([819d7b7](819d7b7))
* Implement multi-repository batch assessment (Phase 1 of issue [ambient-code#68](https://github.com/chambridge/agentready/issues/68)) ([ambient-code#74](https://github.com/chambridge/agentready/issues/74)) ([befc0d5](befc0d5))
* Implement OneCommandSetupAssessor (fixes [ambient-code#75](https://github.com/chambridge/agentready/issues/75)) ([ambient-code#88](https://github.com/chambridge/agentready/issues/88)) ([668ba1b](668ba1b))
* Implement OpenAPISpecsAssessor (fixes [ambient-code#80](https://github.com/chambridge/agentready/issues/80)) ([ambient-code#97](https://github.com/chambridge/agentready/issues/97)) ([45ae36e](45ae36e))
* implement Phase 2 multi-repository assessment reporting ([ambient-code#117](https://github.com/chambridge/agentready/issues/117)) ([8da56c2](8da56c2)), closes [ambient-code#69](https://github.com/chambridge/agentready/issues/69)
* implement report schema versioning ([ambient-code#43](https://github.com/chambridge/agentready/issues/43)) ([4c4752c](4c4752c))
* Implement SemanticNamingAssessor (fixes [ambient-code#82](https://github.com/chambridge/agentready/issues/82)) ([ambient-code#95](https://github.com/chambridge/agentready/issues/95)) ([d87a280](d87a280))
* Implement SeparationOfConcernsAssessor (fixes [ambient-code#78](https://github.com/chambridge/agentready/issues/78)) ([ambient-code#92](https://github.com/chambridge/agentready/issues/92)) ([99bfe28](99bfe28))
* Implement StructuredLoggingAssessor (fixes [ambient-code#79](https://github.com/chambridge/agentready/issues/79)) ([ambient-code#96](https://github.com/chambridge/agentready/issues/96)) ([2b87ca7](2b87ca7))
* Phase 1 Task 1 - Consolidate Security Validation Patterns ([ambient-code#129](https://github.com/chambridge/agentready/issues/129)) ([8580c45](8580c45)), closes [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122)
* Phase 1 Tasks 2-3 - Consolidate Reporter Base & Assessor Factory ([ambient-code#131](https://github.com/chambridge/agentready/issues/131)) ([8e12bf9](8e12bf9)), closes [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122) [ambient-code#122](https://github.com/chambridge/agentready/issues/122)
* Phase 2 Task 4 - Replace manual config validation with Pydantic ([ambient-code#134](https://github.com/chambridge/agentready/issues/134)) ([d83cf58](d83cf58))
* Redesign homepage features with two-column layout and research links ([ambient-code#189](https://github.com/chambridge/agentready/issues/189)) ([570087d](570087d)), closes [ambient-code#187](https://github.com/chambridge/agentready/issues/187)
* redesign HTML report with dark theme and larger fonts ([ambient-code#39](https://github.com/chambridge/agentready/issues/39)) ([59f6702](59f6702)), closes [#8b5cf6](https://github.com/chambridge/agentready/issues/8b5cf6) [#XX](https://github.com/chambridge/agentready/issues/XX)
* Rename 'learn' command to 'extract-skills' for clarity ([ambient-code#125](https://github.com/chambridge/agentready/issues/125)) ([64d6563](64d6563)), closes [hi#scoring](https://github.com/hi/issues/scoring) [ambient-code#123](https://github.com/chambridge/agentready/issues/123)
* replace markdown-link-check with lychee for link validation ([ambient-code#177](https://github.com/chambridge/agentready/issues/177)) ([f1a4545](f1a4545))
* Standardize on Python 3.12+ with forward compatibility for 3.13 ([ambient-code#132](https://github.com/chambridge/agentready/issues/132)) ([84f2c46](84f2c46))
* Terminal-Bench eval harness (MVP Phase 1) ([ambient-code#178](https://github.com/chambridge/agentready/issues/178)) ([d06bab4](d06bab4)), closes [ambient-code#171](https://github.com/chambridge/agentready/issues/171)
* **workflows:** add comment posting for [@agentready-dev](https://github.com/agentready-dev) agent ([5dff614](5dff614))

### Performance Improvements

* implement lazy loading for heavy CLI commands ([ambient-code#151](https://github.com/chambridge/agentready/issues/151)) ([6a7cd4e](6a7cd4e))

### BREAKING CHANGES

* Users must update scripts from 'agentready learn'
to 'agentready extract-skills'. All flags and options remain identical.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants