Skip to content

fix: consider renovate for dependency_security check#317

Merged
kami619 merged 8 commits intoambient-code:mainfrom
dbasunag:feature/dependency_security
Feb 24, 2026
Merged

fix: consider renovate for dependency_security check#317
kami619 merged 8 commits intoambient-code:mainfrom
dbasunag:feature/dependency_security

Conversation

@dbasunag
Copy link
Copy Markdown
Contributor

Description

Add consideration for renovate in depdency_security check

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 # #316
Relates to #

Changes Made

  • added various renovate config files for consideration in dependency_security check
  • added associated tests

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

@dbasunag dbasunag force-pushed the feature/dependency_security branch from e3b54c4 to dd95414 Compare February 20, 2026 01:42
@dbasunag dbasunag force-pushed the feature/dependency_security branch from dd95414 to 0b68966 Compare February 20, 2026 01:46
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 20, 2026

📈 Test Coverage Report

Branch Coverage
This PR 66.4%
Main 66.3%
Diff ✅ +0.1%

Coverage calculated from unit tests only

@github-actions
Copy link
Copy Markdown
Contributor

AgentReady Code Review — PR #317

fix: consider renovate for dependency_security check


Summary

This PR correctly addresses the gap of not recognizing Renovate as a valid dependency update tool alongside Dependabot. The implementation is generally solid with good test coverage. A few issues need attention before this is ready to merge.


AgentReady Attribute Compliance

dependency_security assessor

Check Status Notes
Attribute criteria string ⚠️ Needs Update Still reads "Dependabot, CodeQL, or SAST tools configured" — Renovate is not mentioned
Remediation steps ⚠️ Needs Update Both pass and fail remediation branches only list Dependabot steps/tools
Scoring fairness ⚠️ Regression See below

Issues

1. Silent regression — Dependabot bonus points removed (Must Fix)

The original code awarded 5 bonus points when Dependabot was configured and had at least one scheduled update (updates block in YAML). This block was removed along with the yaml import. Repos with a properly configured dependabot.yml now score 30 instead of up to 35. This is a silent regression that affects existing assessments. If the intent was to simplify (treating existence as sufficient), that decision should be explicit in the PR description.

Suggested fix: Either restore the bonus logic, or explicitly document the decision to drop it.


2. Attribute criteria not updated (Must Fix)

src/agentready/assessors/security.py:34

# Current — incorrect after this PR:
criteria="Dependabot, CodeQL, or SAST tools configured; secret detection enabled",

# Should be:
criteria="Dependabot or Renovate, CodeQL, or SAST tools configured; secret detection enabled",

3. Remediation steps omit Renovate (Should Fix)

Both the partial-pass and fail Remediation objects only list Dependabot. Any repo that gets a fail and reads the remediation will not discover Renovate as an option.

Add "Renovate" to tools, and a step like:
"Or configure Renovate: add renovate.json to your repository root"


4. Missing .github/renovate.json5 config path (Should Fix)

The official Renovate docs list .github/renovate.json5 as a valid location. The current renovate_configs list handles .github/renovate.json but not .github/renovate.json5. There is also no test for this case.

renovate_configs = [
    repository.path / "renovate.json",
    repository.path / "renovate.json5",
    repository.path / ".github" / "renovate.json",
    repository.path / ".github" / "renovate.json5",   # missing
    repository.path / ".renovaterc",
    repository.path / ".renovaterc.json",
]

Code Quality

Positives:

  • Moving import json to the module top-level is correct and consistent with Python style.
  • Removing the now-unused import yaml is correct.
  • The any(config.exists() for config in renovate_configs) idiom is clean and readable.
  • Graceful JSON parse failure with try/except is proper and consistent with the rest of the file.

Minor observation — test score assertions:

Several tests use assert finding.score >= 30 in fully-controlled environments. Using == 30 would catch unexpected regressions in scoring logic:

# More precise:
assert finding.score == 30  # only Renovate configured, no other tools in test repo

Test Coverage

Test Case Coverage
renovate.json root
.github/renovate.json
.renovaterc.json
renovate.json5
.renovaterc
Renovate in package.json
Malformed package.json
Dependabot takes precedence
.github/renovate.json5 ❌ Missing

Score Impact

Scenario Before PR After PR
Dependabot with updates block 35 pts 30 pts (regression)
Dependabot without updates block 30 pts 30 pts
Renovate (any config file) 0 pts 30 pts (improvement)
Both Dependabot + Renovate 30–35 pts 30 pts

Verdict

Request changes before merging. The core implementation is correct and well-tested. The blocking items are:

  1. Restore or explicitly drop the Dependabot bonus points (with justification in the PR description)
  2. Update the criteria string on the Attribute model
  3. Update remediation steps to mention Renovate

Items 3 and 4 (remediation + .github/renovate.json5) are important but could follow as a fast-track cleanup PR if preferred.

@github-actions
Copy link
Copy Markdown
Contributor

AgentReady Code Review — PR #317

PR: fix: consider renovate for dependency_security check
Files changed: 2 | +288 / -15 | All CI checks: pass


Summary

This PR extends DependencySecurityAssessor to recognize Renovate as a valid dependency update tool alongside Dependabot, and removes an unused yaml import. The test coverage is comprehensive. Overall the direction is correct — Renovate is widely adopted and equivalent to Dependabot for agent-readiness purposes.


Attribute Compliance

Attribute Impact Notes
dependency_security Improved detection Now correctly scores repos using Renovate
test_coverage Positive 8 new targeted test cases
code_quality Positive Module-level import cleanup

Issues

Score Regression for Dependabot Users (Medium)

The original code granted a +5 bonus for Dependabot configs with configured updates sections:

# REMOVED in this PR:
if config and "updates" in config and len(config["updates"]) > 0:
    score += 5
    evidence.append(f"  {len(config['updates'])} package ecosystem(s) monitored")

Repositories with well-configured Dependabot will now score 30 instead of 35 on this sub-criterion. This is a silent regression. If the intent was to simplify scoring parity between Dependabot and Renovate, that is reasonable — but it should be called out explicitly in the PR description and ideally restored as an equivalent check for Renovate too.

Suggestion: Either restore the bonus (extend it to Renovate as well), or document the scoring change intentionally.

Renovate + Dependabot Coexistence (Low)

The elif structure means if both tools are present, only Dependabot is credited:

if dependabot_config.exists():
    score += 30
    tools_found.append("Dependabot")
elif any(config.exists() for config in renovate_configs):   # never reached if Dependabot found
    ...

The test test_dependabot_takes_precedence_over_renovate explicitly validates this. The behavior is intentional and sensible (both tools serve the same purpose). No code change needed, but the test name implies "precedence" when this is really "first-match wins" — a minor naming clarification could help.

renovate.json5 Existence-Only Check (Low)

renovate.json5 is detected by file existence only (not parsed). This is correct since JSON5 is not parseable by the stdlib json module. The current approach is appropriate, but a comment noting why renovate.json5 is not parsed would help future maintainers.


What's Good

  • Complete Renovate coverage: All 5 canonical Renovate config locations are checked (renovate.json, renovate.json5, .github/renovate.json, .renovaterc, .renovaterc.json) plus package.json embedding.
  • Correct import cleanup: import json moved to module level (PEP 8 compliant — previously deferred inside the function body unnecessarily).
  • Exception handling: package.json JSON parsing is wrapped in try/except, consistent with codebase patterns.
  • Test quality: 8 new tests, each exercising one config variant. The malformed package.json test (test_renovate_package_json_malformed) validates graceful degradation explicitly.
  • All CI checks pass: Blocking tests (3.12, 3.13), CodeQL, coverage, macOS compatibility.

Minor Notes

  • The renovate.json5 test fixture contains a trailing comma (valid JSON5, invalid JSON). Since the assessor only checks file existence, the test correctly passes — the inline comment is accurate and helpful.
  • PR description contains a typo: "depdency_security" should be "dependency_security".

Verdict

Approve with one request: Address the Dependabot scoring regression (restore the +5 bonus or document the intentional removal). All other observations are low-severity.

The Renovate support itself is well-implemented and the test coverage is excellent.


Generated by AgentReady review-agentready

@dbasunag dbasunag marked this pull request as ready for review February 23, 2026 14:43
@github-actions
Copy link
Copy Markdown
Contributor

AgentReady Code Review — PR #317

fix: consider renovate for dependency_security check (DRAFT)
Fixes #316 | src/agentready/assessors/security.py + tests


Summary

Well-implemented addition of Renovate detection across all standard config file locations. Good error handling, proper JSON5 acknowledgment, and comprehensive tests. A few design decisions worth discussing.


Issues

Medium

elif chain means repos with both Dependabot and Renovate only score Dependabot

The structure is:

if dependabot_config.exists():
    score += 30  # Dependabot
elif any(config.exists() for config in renovate_configs):
    score += 30  # Renovate
else:
    # check package.json for renovate

A repo with both Dependabot AND Renovate only gets credit for Dependabot (first match wins). The test test_dependabot_first_match_wins_over_renovate documents this as expected, but the test name suggests it's an incidental consequence of elif, not an intentional design decision. If it's intentional (they serve the same purpose, no double-counting), add a comment explaining the rationale.

Bonus points logic is inconsistent between Dependabot and Renovate

Dependabot bonus: checks for scheduled updates in YAML (meaningful check).
Renovate bonus: checks len(config) > 0 (any non-empty JSON object, including {"$schema": "..."}, earns +5).

The Renovate bonus should check for meaningful configuration, e.g., presence of "extends", "schedule", or "packageRules".

Minor

.renovaterc is parsed as JSON but may be JSON5

.renovaterc (without extension) supports JSON5 format per Renovate docs. The except Exception: continue handles parse failures gracefully, but it silently gives no bonus for valid JSON5 configs. The comment for .json5 files should also note .renovaterc may be JSON5.

package.json Renovate is only checked when no dedicated config file exists

This is intentional (avoid double-counting), but a brief comment would make the intent clear to future maintainers.

Import cleanup is good

Moving import json from inline (inside a conditional) to module-level is the right fix.


What's Good

  • Detects all standard Renovate config locations (renovate.json, renovate.json5, .github/renovate.json, .github/renovate.json5, .renovaterc, .renovaterc.json, package.json)
  • JSON5 limitation is acknowledged with comments — good transparency
  • except Exception: continue pattern in the bonus loop is safe
  • Tests cover all detection paths including malformed JSON and coexistence with Dependabot
  • Criteria string and remediation steps updated consistently
  • PR checklist is well-completed compared to other open PRs

Attribute Impact

Attribute Impact
dependency_security Positive — detection rate improves significantly for Renovate-using repos
test_coverage Positive — 8 new targeted tests

Verdict: Approve with minor fixes. Address the bonus points consistency issue and add a comment explaining the elif intent. Ready to promote from DRAFT after those changes.

@github-actions
Copy link
Copy Markdown
Contributor

AgentReady Code Review — PR #317

PR: fix: consider renovate for dependency_security check
Files: src/agentready/assessors/security.py, tests/unit/test_assessors_security.py


Summary

This PR correctly identifies that DependencySecurityAssessor unfairly penalizes repositories using Renovate instead of Dependabot. The fix is well-motivated and the test coverage is extensive. However, there is one critical bug and several minor issues to address.


🔴 Critical Bug

test_remediation_includes_renovate is defined outside the test class

# tests/unit/test_assessors_security.py (bottom of file)

def test_remediation_includes_renovate(self, tmp_path):  # ← module-level function with `self`

This function is defined at module scope, not inside TestDependencySecurityAssessor. Pytest will never discover or run it — it's a dead test. The self parameter confirms it was intended as a class method.

Fix: Indent this function under class TestDependencySecurityAssessor.


🟡 Logic Concern: Mutual Exclusion of Dependabot + Renovate

The PR uses an if/else structure that awards the 30-point dependency-update bonus to at most one tool:

if dependabot_config.exists():
    score += 30
    ...
else:
    # Only checked when Dependabot is absent
    if has_renovate_files or has_renovate_package_json:
        score += 30

This means a repository with both Dependabot and Renovate configured only gets credit for Dependabot. The test test_dependabot_first_match_wins_over_renovate explicitly validates this behavior, confirming it's intentional — but the rationale should be documented. Since both tools serve the same purpose, awarding only once is defensible, but the intent should be clear in a comment.


🟡 Minor: package.json Read Twice in Bonus Check

In the bonus scoring block, package.json is re-read and re-parsed even though it was already parsed earlier:

# First read (to set has_renovate_package_json)
pkg = json.loads(package_json.read_text())
has_renovate_package_json = "renovate" in pkg

# ...later, in the for/else else-branch...
pkg = json.loads(package_json.read_text())  # ← redundant re-read
renovate_config = pkg["renovate"]

Cache the parsed pkg dict (or the renovate_config value) from the first parse and reuse it in the bonus block.


🟡 Minor: for/else Pattern Readability

The bonus logic uses Python's for/else construct to give file-based configs precedence over package.json:

for config_file in renovate_configs:
    ...
    if ...:
        break
else:
    # Runs only if loop completed without break
    if has_renovate_package_json:
        ...

This is valid Python but an unusual pattern that can confuse readers. A simple boolean flag (bonus_awarded = False) would be clearer and avoid the subtle semantics of for/else.


✅ What's Working Well

  • Comprehensive config location coverage: Handles renovate.json, renovate.json5, .github/renovate.json, .github/renovate.json5, .renovaterc, .renovaterc.json, and package.json#renovate. Matches Renovate's official config locations.
  • JSON5 handling: Correctly skips bonus scoring for .json5 files (stdlib json can't parse them) while still detecting existence.
  • Graceful degradation: All file reads are wrapped in try/except, consistent with the assessor pattern.
  • import json moved to module level: Correctly cleans up the inline import json that existed in the JS scanner section.
  • Test coverage: 13 new well-structured tests covering all Renovate config locations, bonus scoring, edge cases (malformed JSON, both tools present, JSON5 no-bonus), and remediation content.
  • Attribute compliance: Criteria string, threshold, remediation steps, tools list, and examples all updated consistently. The renovate.json example in remediation is accurate.

Required Changes Before Merge

  1. Move test_remediation_includes_renovate inside TestDependencySecurityAssessor (indent 4 spaces). This is blocking — the test is currently dead.

Suggested (Non-Blocking)

  1. Add a brief comment explaining why Dependabot and Renovate are mutually exclusive in scoring.
  2. Cache the parsed package.json dict to avoid the double read.
  3. Replace the for/else with a bonus_awarded flag for readability.

Score Impact: This fix benefits repositories using Renovate (common in Node.js/multi-ecosystem setups) that were previously scoring 0 on the 30-point dependency-update sub-score. Correct and valuable change once the dead test is fixed.

Review by Claude Code (AgentReady review-agentready skill)

@github-actions
Copy link
Copy Markdown
Contributor

AgentReady Code Review — PR #317

Reviewer: Claude Code (AgentReady Development Agent)
Date: 2026-02-23
Files reviewed: src/agentready/assessors/security.py, tests/unit/test_assessors_security.py


Summary

This PR correctly extends the DependencySecurityAssessor to recognize Renovate as an alternative to Dependabot, with appropriate mutual exclusion logic, bonus scoring, and full test coverage. Previous review iterations flagged several issues that appear to have been addressed. The implementation is solid overall.

Verdict: ✅ Approved with two non-blocking notes


AgentReady Attribute Compliance

Attribute Status Notes
dependency_security ✅ Improved Renovate now correctly scores 30 pts base + 5 bonus
test_coverage ⚠️ Partial 66.3% overall (project target: >80%). This PR adds +13 tests and improves coverage, but the project remains below target.
code_quality ✅ Pass Clean implementation; no global state; exception handling is appropriate
type_annotations ✅ Pass Existing type annotations preserved

Score Impact Analysis

Repository Configuration Before PR After PR Delta
Dependabot with updates block 35 pts 35 pts ±0
Dependabot minimal (no updates) 30 pts 30 pts ±0
Renovate (any config, minimal) 0 pts 30 pts +30
Renovate (meaningful keys) 0 pts 35 pts +35
Both Dependabot + Renovate 35 pts 35 pts ±0 (mutual exclusion, intentional)

Conclusion: No regressions. Repos using Renovate now receive full credit.


Issues Resolved Since Previous Reviews

  • test_remediation_includes_renovate is now correctly indented inside TestDependencySecurityAssessor (line 760)
  • ✅ Dependabot +5 bonus preserved — score regression from earlier revision is fixed
  • .github/renovate.json5 detection path added
  • ✅ Criteria string updated to mention Renovate
  • ✅ Remediation steps and tools lists include Renovate in both fail and partial-pass branches
  • ✅ Mutual exclusion rationale documented in code comments (lines 47–48)
  • package.json parsed once and cached (cached_renovate_config) — no double-read

Remaining Notes (Non-Blocking)

1. Partial remediation missing renovate.json example

The score >= 30 and score < 60 remediation branch (lines 251–289) mentions Renovate in steps and tools but its examples list only includes the dependabot.yml template. The score < 30 (fail) branch correctly includes both. For consistency:

# In the partial-pass remediation examples list (around line 272):
examples=[
    "# .github/dependabot.yml\nversion: 2\nupdates:\n  - package-ecosystem: pip\n    directory: /\n    schedule:\n      interval: weekly",
    '# renovate.json\n{\n  "extends": ["config:base"],\n  "schedule": "after 10pm every weekday"\n}',  # add this
],

2. Bonus criteria asymmetry between Dependabot and Renovate

  • Dependabot gets +5 for any non-empty updates list (even a minimal single-entry block)
  • Renovate gets +5 only if specific semantic keys are present (extends, schedule, packageRules, rangeStrategy, semanticCommits)

A minimal Dependabot config qualifies for bonus more easily than a minimal Renovate config. This may be intentional (Dependabot's updates block is inherently meaningful), but worth a clarifying comment if so.


Security Analysis

No security issues introduced. Exception handling is present for all file I/O and JSON parsing. The JSON5 limitation (stdlib cannot parse it) is correctly documented and handled by falling back to existence-only detection. yaml.safe_load() usage for Dependabot config is correct and safe.


Test Coverage

23 test cases added, covering all Renovate config locations, bonus scoring, malformed JSON, precedence rules, and remediation text. The test_renovate_package_json_malformed test validates graceful degradation for corrupted input. Coverage of the security module is comprehensive.

One observation: test_dependabot_bonus_scoring uses languages={"Python": 60, "JavaScript": 40} but creates no pyproject.toml or package.json, so the test implicitly depends on those files being absent. This is correct but worth noting if the test ever fails unexpectedly.


Overall: Clean implementation, good test coverage, no regressions. The two non-blocking notes above are suggestions for a follow-up, not merge blockers.

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

AgentReady Code Review — PR #317

fix: consider renovate for dependency_security check

All CI checks pass. This review covers AgentReady attribute compliance, code quality, and test adequacy.


Summary

This PR extends DependencySecurityAssessor to recognize Renovate as a valid alternative to Dependabot for dependency update management. The approach (Dependabot first, Renovate as fallback) is sound and the test coverage is thorough. A few issues require attention before merge.


Score Impact Analysis

Scenario Before After
Renovate-only repo 0 pts (dep tool) 30–35 pts
Both Dependabot + Renovate 30–35 pts 30–35 pts (unchanged)
Dependabot-only repo 30–35 pts 30–35 pts (unchanged)

This is a correct and meaningful change — Renovate is widely used and was previously invisible to the assessor.


Issues

🔴 Required Changes

1. Bug: package_json variable is defined twice

package_json = repository.path / "package.json" is now defined at two locations in assess():

  • Line ~82 (new Renovate section, inside the else block)
  • Line ~182 (existing npm audit section)

This works by accident today because the second definition is outside the else block. However, if the Dependabot path is taken, the package_json local variable from the else block is never set, yet the second reference still works because it's a fresh assignment. This is fine functionally but creates a confusing pattern. The import json was correctly moved to the module level — the same should be done for the package_json path computation. Define it once near the top of assess() or at the point it's first needed, outside any conditional block.

# Before (two separate definitions)
else:
    package_json = repository.path / "package.json"  # line ~82
    ...
# Later...
package_json = repository.path / "package.json"  # line ~182
# After (define once at top of assess())
package_json = repository.path / "package.json"

2. Misleading variable name: cached_renovate_config

The variable cached_renovate_config is not a cache in any meaningful sense — it stores the parsed renovate key from package.json for reuse within the same function call. Naming it cached_* implies persistence across calls, which is misleading.

Suggested rename: renovate_pkg_config or pkg_renovate_config.


🟡 Recommendations

3. Test assertion gap in test_renovaterc_configuration

.renovaterc with "extends": [...] satisfies meaningful_keys, so this test will actually score 35 (not just 30). The assertion assert finding.score >= 30 is correct but under-specified. Consider asserting == 35 to document the expected bonus behavior, or add a separate "no bonus" test with a .renovaterc that lacks meaningful keys.

4. Inaccurate test comment in test_dependabot_first_match_wins_over_renovate

The docstring says "first match (Dependabot) wins due to elif structure" but the code uses an if/else structure, not elif. Minor but could mislead future readers.

5. Ambiguous criteria string punctuation

criteria="Dependabot or Renovate, CodeQL, or SAST tools configured; secret detection enabled",

The comma after "Renovate" makes parsing ambiguous — is it "Dependabot" OR "Renovate, CodeQL, or SAST"? Suggest:

criteria="(Dependabot or Renovate) and/or CodeQL/SAST tools configured; secret detection enabled",

6. No test for has_renovate_files=True (JSON5 only) + meaningful package.json → bonus awarded

When only a .json5 file exists (which gets base points but no bonus from the file loop) and package.json also has meaningful Renovate config, the fallback correctly awards +5 via cached_renovate_config. This case is not explicitly tested. Consider adding a test to document this behavior.


Positive Observations

  • Moving import json to module level is the right cleanup.
  • The bonus_awarded flag correctly prevents double-counting the +5 bonus across multiple config sources.
  • JSON5 handling (detect presence, skip bonus parsing) is pragmatic and well-documented with inline comments.
  • 15 new test cases cover the key scenarios thoroughly.
  • Graceful error handling with except Exception: pass / except Exception: continue is consistent with the existing codebase pattern.
  • Remediation text, tools list, and examples are all updated consistently.

Verdict

The core logic is correct and the test coverage is strong. The required changes are minor refactors (variable deduplication, naming) but important for maintainability. Address items 1–2 and this is ready to merge.


Reviewed by AgentReady Code Review Agent

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 23, 2026

Outdated review (click to expand)
Outdated review (click to expand)
Outdated review (click to expand)

🤖 AgentReady Code Review

PR Status: 4 issues found (0 🔴 Critical, 2 🟡 Major, 2 🔵 Minor)
Score Impact: Current 80.0/100 → ~80.0/100 if all issues fixed (net neutral; core logic is correct)
Certification: Gold — no change expected


Note on Previous Reviews

Earlier review iterations incorrectly claimed the Dependabot +5 bonus scoring was removed (a false positive). The diff shows the bonus block is preserved intact — only the evidence string changed from "alerts" to "updates". The scoring regression claim should be disregarded.


🟡 Major Issues (Confidence 80-89) — Manual Review Required

1. cached_renovate_config not guarded as dict — false-positive bonus possible

Attribute: dependency_security (Tier 1: Essential) — assessment accuracy
Confidence: 85%
Score Impact: −0 to AgentReady self-score (no Renovate config in this repo), but affects assessment accuracy for users
Location: New Renovate else-block in src/agentready/assessors/security.py

Issue Details:
pkg["renovate"] in package.json can legally be a string (e.g. "renovate": "some-preset-string") per the Renovate docs. The bonus check does:

if any(key in cached_renovate_config for key in meaningful_keys):
    score += 5

If cached_renovate_config is a string like "config:base-extends-semanticCommits", then "semanticCommits" in cached_renovate_config performs substring matching and returns True — awarding a false-positive +5 bonus. A list value would behave similarly incorrectly.

Remediation:

# Add isinstance guard before the bonus check:
if (
    not bonus_awarded
    and has_renovate_package_json
    and isinstance(cached_renovate_config, dict)
    and cached_renovate_config
):
    if any(key in cached_renovate_config for key in meaningful_keys):
        score += 5
        evidence.append("  Meaningful Renovate configuration detected")

2. test_renovaterc_configuration assertion is too loose — misses bonus regression

Attribute: test_coverage (Tier 1: Essential) — test precision
Confidence: 90%
Score Impact: Negligible on self-score; but this test would silently pass even if the .renovaterc bonus path broke
Location: New test in tests/unit/test_assessors_security.py

Issue Details:
The test fixture for test_renovaterc_configuration writes:

{"extends": ["config:base"], "timezone": "America/New_York", "dependencyDashboard": true}

"extends" is in meaningful_keys, so this config will score 35 (30 base + 5 bonus), not 30. But the assertion is:

assert finding.score >= 30  # Renovate = 30 points

>= 30 passes for both 30 and 35. If the bonus path for .renovaterc regresses (scoring 30 instead of 35), this test still passes silently.

Remediation:

# Update assertion to be precise:
assert finding.score == 35  # 30 base + 5 bonus (extends is a meaningful_key)

🔵 Minor Issues

3. Test docstring says "elif" — code uses "if/else"

Attribute: documentation (Tier 3: Important)
Confidence: 90%

def test_dependabot_first_match_wins_over_renovate(self, tmp_path):
    """Test that if both Dependabot and Renovate exist, first match (Dependabot) wins due to elif structure."""

The implementation uses if dependabot_config.exists(): ... else: ..., not elif. The docstring incorrectly attributes the mutual-exclusion behavior to an elif chain. Correct it to:
"""Test that Dependabot takes precedence because Renovate is only checked in the else branch."""


4. cached_renovate_config is a misleading variable name

Attribute: code_quality (Tier 2: Critical)
Confidence: 82%

The name implies persistence across calls (a cache), but it is just a local temporary holder for the parsed JSON value within a single assess() call. Suggest renaming to renovate_pkg_config or pkg_renovate_config to avoid confusion for future maintainers.


Summary

  • Auto-Fix Candidates: 0
  • Manual Review: 2 major issues require attention before merge
  • Total Score Improvement Potential: negligible on AgentReady self-score
  • Core logic: The Renovate detection and mutual-exclusion design are correct; test coverage is comprehensive
  • AgentReady Assessment: Run agentready assess . after fixes to verify score

🤖 Generated with Claude Code

If this review was useful, react with 👍. Otherwise, react with 👎.

@github-actions
Copy link
Copy Markdown
Contributor

AgentReady Code Review — PR #317

fix: consider renovate for dependency_security check

CI: All blocking checks pass. This review covers AgentReady attribute compliance, code quality, security, and best practices.


Overview

This PR extends DependencySecurityAssessor to recognise Renovate as a valid, first-class alternative to Dependabot. The design decision — Dependabot wins if both are present, Renovate fills the gap otherwise — is sound. The test suite is extensive and clearly documents expected scoring behaviour.


Score Impact Analysis

Scenario Score Before Score After
Renovate-only repo 0 pts (dep tool) 30–35 pts
Dependabot + Renovate 30–35 pts 30–35 pts (unchanged)
Dependabot-only repo 30–35 pts 30–35 pts (unchanged)

This is a correct and meaningful change. Renovate is widely adopted (especially in mono-repos and non-GitHub-hosted codebases) and was previously invisible to the assessor.


Required Changes 🔴

1. Duplicate package_json path definition

package_json = repository.path / "package.json" is now assigned at two points in assess():

  • Inside the new else block (Renovate section, ~line 82)
  • In the existing JavaScript/npm section (~line 182)

Functionally this is harmless, but it creates a confusing pattern — readers may wonder whether the two definitions are intentionally different. Move the definition to the top of assess() once, before any conditionals:

def assess(self, repository: Repository) -> Finding:
    score = 0
    evidence = []
    tools_found = []
    package_json = repository.path / "package.json"  # defined once

    # 1. Dependency update tools …

2. Misleading variable name: cached_renovate_config

This variable holds the parsed renovate key from package.json for reuse within a single function call. The prefix cached_ implies persistence across calls (e.g., an LRU cache or memoization). Rename to pkg_renovate_config or renovate_pkg_config to accurately describe what it holds.


Recommendations 🟡

3. test_renovaterc_configuration assertion under-specifies expected score

The .renovaterc fixture contains "extends": ["config:base"], which is in meaningful_keys. The actual score will be 35, not just ≥ 30. Tighten the assertion to == 35 or add a separate test with a .renovaterc that lacks meaningful keys to explicitly document the no-bonus path.

4. Inaccurate docstring in test_dependabot_first_match_wins_over_renovate

"first match (Dependabot) wins due to elif structure"

The code uses an if/else structure, not elif. Update the docstring to avoid misleading future contributors.

5. criteria string is grammatically ambiguous

criteria="Dependabot or Renovate, CodeQL, or SAST tools configured; secret detection enabled",

The comma after "Renovate" makes it unclear whether the grouping is (Dependabot or Renovate), CodeQL, or SAST or Dependabot or (Renovate, CodeQL, or SAST). Suggest:

criteria="(Dependabot or Renovate), CodeQL, or SAST tools configured; secret detection enabled",

6. Untested: JSON5-only + meaningful package.json → bonus awarded via fallback

When only a .json5 file is present (base points, no bonus from the file loop) and package.json also carries meaningful Renovate config, the if not bonus_awarded and has_renovate_package_json branch correctly awards +5. This edge case is not covered by any test. Adding one would explicitly document that the fallback path works as intended.

7. Consider documenting the "both tools present → Dependabot wins" design decision

A brief inline comment explaining why only one tool gets credit (they serve the same purpose; avoid double-counting) would help reviewers understand the intentional mutual exclusion without reading the full docstring or PR description.


Positive Observations ✅

  • Moving import json to module level is the correct cleanup — it was previously inside a nested conditional.
  • The bonus_awarded flag correctly prevents double-counting the +5 bonus when both file-based and package.json Renovate configs are present.
  • JSON5 handling is pragmatic: detect presence (file existence), skip bonus parsing (stdlib json cannot parse it). Inline comments make this explicit.
  • 15 new test cases covering the key scoring paths — base score, bonus, no-bonus, graceful degradation on malformed JSON, and mutual exclusion with Dependabot.
  • Graceful except Exception: pass / continue pattern is consistent with the existing codebase.
  • Remediation text, tools list, examples, threshold, and criteria string are all updated consistently — no stale references.
  • The min(score, 100) cap is preserved and correctly handles Renovate + other tools exceeding 100 points.

AgentReady Attribute Compliance

Check Status
dependency_security scoring unchanged for existing Dependabot repos
Renovate-using repos now correctly score 30–35 pts
Remediation references both Dependabot and Renovate
Evidence strings are clear and actionable
All tier/weight values unchanged (no unintended score drift)

Security

No security concerns. File reads use Path.read_text() with json.loads() / yaml.safe_load() and exception handling — consistent with existing patterns. No shell execution, no path traversal risk.


Verdict

The logic is correct, the test coverage is strong, and the feature addresses a real gap. Address items 1 and 2 (required) before merge. Items 3–7 are optional improvements.


Reviewed by Claude Code (claude-sonnet-4-6)

@kami619 kami619 dismissed github-actions[bot]’s stale review February 24, 2026 20:19

the claude review's are not working as expected, there is some underlying issue, as the reviews addressed by contributors are not being validated after the fact.

@kami619 kami619 merged commit 35bfbbf into ambient-code:main Feb 24, 2026
10 checks passed
github-actions bot pushed a commit that referenced this pull request Feb 24, 2026
## [2.29.4](v2.29.3...v2.29.4) (2026-02-24)

### Bug Fixes

* consider renovate for dependency_security check ([#317](#317)) ([35bfbbf](35bfbbf))
@github-actions
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 2.29.4 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

github-actions bot pushed a commit to patrickstrick/agentready that referenced this pull request Mar 5, 2026
# 1.0.0 (2026-03-05)

### Bug Fixes

* add bounded retry logic for LLM rate limit handling ([ambient-code#205](https://github.com/patrickstrick/agentready/issues/205)) ([6ecb786](6ecb786)), closes [ambient-code#104](https://github.com/patrickstrick/agentready/issues/104)
* Add comprehensive subprocess security guardrails (fixes [ambient-code#57](https://github.com/patrickstrick/agentready/issues/57)) ([ambient-code#66](https://github.com/patrickstrick/agentready/issues/66)) ([454b80e](454b80e))
* Add comprehensive YAML validation to prevent attacks (fixes [ambient-code#56](https://github.com/patrickstrick/agentready/issues/56)) ([ambient-code#63](https://github.com/patrickstrick/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/patrickstrick/agentready/issues/143)) ([a98dc87](a98dc87)), closes [ambient-code#137](https://github.com/patrickstrick/agentready/issues/137)
* address P1 code quality issues from code review ([ambient-code#36](https://github.com/patrickstrick/agentready/issues/36)) ([5976332](5976332))
* address P1 code quality issues from code review ([ambient-code#37](https://github.com/patrickstrick/agentready/issues/37)) ([4be1d5e](4be1d5e))
* address P1 code quality issues from code review ([ambient-code#38](https://github.com/patrickstrick/agentready/issues/38)) ([77f2300](77f2300))
* **assessors:** FileSizeLimitsAssessor now respects .gitignore ([ambient-code#248](https://github.com/patrickstrick/agentready/issues/248)) ([eaaecc2](eaaecc2)), closes [ambient-code#245](https://github.com/patrickstrick/agentready/issues/245)
* **assessors:** search recursively for OpenAPI specification files ([ambient-code#127](https://github.com/patrickstrick/agentready/issues/127)) ([e2a5778](e2a5778))
* **assessors:** support project-named directories and test-only repos in standard_layout check ([ambient-code#322](https://github.com/patrickstrick/agentready/issues/322)) ([2fbb733](2fbb733)), closes [ambient-code#246](https://github.com/patrickstrick/agentready/issues/246) [ambient-code#305](https://github.com/patrickstrick/agentready/issues/305)
* Check for all official commitlint config file formats ([ambient-code#308](https://github.com/patrickstrick/agentready/issues/308)) ([50588cf](50588cf))
* **ci:** add permissions for leaderboard PR comment posting ([ambient-code#276](https://github.com/patrickstrick/agentready/issues/276)) ([33252e4](33252e4))
* **ci:** use gh pr view for fork PR number lookup in coverage comment ([ambient-code#253](https://github.com/patrickstrick/agentready/issues/253)) ([1688362](1688362))
* **cli:** check .pre-commit-config.yaml for conventional commit ([ambient-code#310](https://github.com/patrickstrick/agentready/issues/310)) ([61c44d9](61c44d9))
* **cli:** Honor excluded_attributes from config file ([ambient-code#306](https://github.com/patrickstrick/agentready/issues/306)) ([ffda546](ffda546)), closes [ambient-code#302](https://github.com/patrickstrick/agentready/issues/302) [ambient-code#302](https://github.com/patrickstrick/agentready/issues/302)
* **cli:** Use removesuffix instead of rstrip for .git URL stripping ([ambient-code#292](https://github.com/patrickstrick/agentready/issues/292)) ([6bd08cf](6bd08cf))
* consider renovate for dependency_security check ([ambient-code#317](https://github.com/patrickstrick/agentready/issues/317)) ([35bfbbf](35bfbbf))
* correct Assessment field name in demo command ([ambient-code#41](https://github.com/patrickstrick/agentready/issues/41)) ([b48622d](b48622d)), closes [ambient-code#12](https://github.com/patrickstrick/agentready/issues/12)
* Correct datetime import pattern in RepomixService ([ambient-code#65](https://github.com/patrickstrick/agentready/issues/65)) ([517aa6e](517aa6e))
* correct GitHub repository link in site navigation ([5492278](5492278))
* correct Liquid syntax in developer-guide (elif -> elsif) ([75f3b1d](75f3b1d))
* Correct pre-commit template path in PrecommitHooksFixer ([ambient-code#269](https://github.com/patrickstrick/agentready/issues/269)) ([c42a3c9](c42a3c9))
* Create shared test fixtures and fix Assessment schema issues ([ambient-code#114](https://github.com/patrickstrick/agentready/issues/114)) ([46baa13](46baa13))
* disable attestations for Test PyPI to avoid conflict ([ambient-code#155](https://github.com/patrickstrick/agentready/issues/155)) ([a33e3cd](a33e3cd)), closes [pypa/#action-pypi-publish](https://github.com/patrickstrick/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/patrickstrick/agentready/issues/222)) ([f780188](f780188))
* Enable workflow_dispatch for leaderboard update and regenerate data ([ambient-code#299](https://github.com/patrickstrick/agentready/issues/299)) ([091d9dd](091d9dd)), closes [ambient-code#298](https://github.com/patrickstrick/agentready/issues/298)
* exclude DEPLOYMENT.md and SETUP_SUMMARY.md from Jekyll build ([9611207](9611207))
* Improve CLAUDE.md generation prompt and add prompt loading for future LLM integrations [ambient-code#283](https://github.com/patrickstrick/agentready/issues/283)  ([ambient-code#284](https://github.com/patrickstrick/agentready/issues/284)) ([c0aeae4](c0aeae4))
* Improve report metadata display with clean table format ([ca361a4](ca361a4))
* leaderboard workflow and SSH URL support ([ambient-code#147](https://github.com/patrickstrick/agentready/issues/147)) ([de28cd0](de28cd0))
* make E2E test timeouts configurable and add sensitive directory test ([ambient-code#206](https://github.com/patrickstrick/agentready/issues/206)) ([27e87e5](27e87e5)), closes [ambient-code#104](https://github.com/patrickstrick/agentready/issues/104) [ambient-code#192](https://github.com/patrickstrick/agentready/issues/192)
* **metadata:** use Windows-compatible strftime token for human timestamp ([ambient-code#291](https://github.com/patrickstrick/agentready/issues/291)) ([faf536d](faf536d))
* 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/patrickstrick/agentready/issues/55)) ([ambient-code#64](https://github.com/patrickstrick/agentready/issues/64)) ([4d1d001](4d1d001))
* Prevent command injection in CommandFix.apply() (fixes [ambient-code#52](https://github.com/patrickstrick/agentready/issues/52)) ([ambient-code#60](https://github.com/patrickstrick/agentready/issues/60)) ([49be28e](49be28e))
* Prevent path traversal in LLM cache (fixes [ambient-code#53](https://github.com/patrickstrick/agentready/issues/53)) ([ambient-code#61](https://github.com/patrickstrick/agentready/issues/61)) ([2bf052d](2bf052d))
* prevent unauthorized message for non-command comments ([ambient-code#262](https://github.com/patrickstrick/agentready/issues/262)) ([84c6f69](84c6f69))
* Prevent XSS in HTML reports (fixes [ambient-code#54](https://github.com/patrickstrick/agentready/issues/54)) ([ambient-code#62](https://github.com/patrickstrick/agentready/issues/62)) ([7c60c69](7c60c69))
* properly indent multi-line fix previews in align output ([ambient-code#289](https://github.com/patrickstrick/agentready/issues/289)) ([4e36cb5](4e36cb5)), closes [ambient-code#285](https://github.com/patrickstrick/agentready/issues/285)
* remove incorrect dbasunag/opendatahub-tests submission ([ambient-code#321](https://github.com/patrickstrick/agentready/issues/321)) ([e6aecf8](e6aecf8)), closes [ambient-code#301](https://github.com/patrickstrick/agentready/issues/301)
* 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/patrickstrick/agentready/issues/115)) ([4fbfee0](4fbfee0))
* resolve all broken links failing CI lychee check ([ambient-code#288](https://github.com/patrickstrick/agentready/issues/288)) ([4412c27](4412c27))
* resolve all test suite failures - achieve zero failures ([ambient-code#180](https://github.com/patrickstrick/agentready/issues/180)) ([990fa2d](990fa2d)), closes [ambient-code#148](https://github.com/patrickstrick/agentready/issues/148) [ambient-code#147](https://github.com/patrickstrick/agentready/issues/147) [ambient-code#145](https://github.com/patrickstrick/agentready/issues/145)
* resolve broken links and workflow failures ([ambient-code#160](https://github.com/patrickstrick/agentready/issues/160)) ([fbf5cf7](fbf5cf7))
* Resolve merge conflicts in CLI main module ([ambient-code#59](https://github.com/patrickstrick/agentready/issues/59)) ([9e0bf2d](9e0bf2d))
* resolve YAML syntax error in continuous-learning workflow ([ambient-code#172](https://github.com/patrickstrick/agentready/issues/172)) ([3d40fcc](3d40fcc))
* resolve YAML syntax error in update-docs workflow and add actionlint ([ambient-code#173](https://github.com/patrickstrick/agentready/issues/173)) ([97b06af](97b06af))
* Sanitize sensitive data in HTML reports (fixes [ambient-code#58](https://github.com/patrickstrick/agentready/issues/58)) ([ambient-code#67](https://github.com/patrickstrick/agentready/issues/67)) ([6fbac76](6fbac76))
* schema backwards compat for attributes_skipped key ([ambient-code#277](https://github.com/patrickstrick/agentready/issues/277)) ([841bcc4](841bcc4))
* **schema:** allow assessments with excluded attributes ([ambient-code#312](https://github.com/patrickstrick/agentready/issues/312)) ([81b999f](81b999f)), closes [ambient-code#301](https://github.com/patrickstrick/agentready/issues/301) [ambient-code#309](https://github.com/patrickstrick/agentready/issues/309)
* **security:** replace pull_request_target with pull_request trigger ([ambient-code#328](https://github.com/patrickstrick/agentready/issues/328)) ([3c5d31b](3c5d31b)), closes [ambient-code#324](https://github.com/patrickstrick/agentready/issues/324)
* 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/patrickstrick/agentready/issues/163)) ([2a29fb8](2a29fb8))
* update --version flag to show correct version and research report date ([ambient-code#221](https://github.com/patrickstrick/agentready/issues/221)) ([5a85abb](5a85abb))
* Update Claude workflow to trigger on [@claude](https://github.com/claude) mentions ([ambient-code#35](https://github.com/patrickstrick/agentready/issues/35)) ([a8a3fab](a8a3fab))
* Use GitHub URL instead of local one ([ambient-code#297](https://github.com/patrickstrick/agentready/issues/297)) ([5abc7c2](5abc7c2))
* **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/patrickstrick/agentready/issues/44)) ([0f61f5c](0f61f5c))
* add ambient-code/agentready to leaderboard ([ambient-code#148](https://github.com/patrickstrick/agentready/issues/148)) ([621152e](621152e))
* Add automated demo command for AgentReady ([ambient-code#24](https://github.com/patrickstrick/agentready/issues/24)) ([f4e89d9](f4e89d9)), closes [ambient-code#1](https://github.com/patrickstrick/agentready/issues/1) [ambient-code#25](https://github.com/patrickstrick/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/patrickstrick/agentready/issues/111)) ([9d3dece](9d3dece))
* Add customizable HTML report themes with runtime switching ([ambient-code#46](https://github.com/patrickstrick/agentready/issues/46)) ([7eeaf84](7eeaf84)), closes [hi#contrast](https://github.com/hi/issues/contrast) [ambient-code#10](https://github.com/patrickstrick/agentready/issues/10)
* add dbasunag/opendatahub-tests to leaderboard ([ambient-code#301](https://github.com/patrickstrick/agentready/issues/301)) ([be7a55f](be7a55f))
* add dgutride/odh-dashboard to leaderboard ([ambient-code#268](https://github.com/patrickstrick/agentready/issues/268)) ([f4911b2](f4911b2))
* Add Doubleagent - specialized AgentReady development agent ([ambient-code#30](https://github.com/patrickstrick/agentready/issues/30)) ([0ab54cb](0ab54cb))
* add feast-dev/feast to leaderboard ([ambient-code#293](https://github.com/patrickstrick/agentready/issues/293)) ([c894ce9](c894ce9))
* add GitHub organization scanning to assess-batch command ([ambient-code#118](https://github.com/patrickstrick/agentready/issues/118)) ([e306314](e306314))
* add Harbor Terminal-Bench comparison for agent effectiveness ([ambient-code#199](https://github.com/patrickstrick/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/patrickstrick/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/patrickstrick/agentready/issues/203)) ([41d87bb](41d87bb))
* add opendatahub-io/opendatahub-tests to leaderboard ([ambient-code#314](https://github.com/patrickstrick/agentready/issues/314)) ([7a52466](7a52466))
* add quay/quay to leaderboard ([ambient-code#162](https://github.com/patrickstrick/agentready/issues/162)) ([d6e8df0](d6e8df0))
* add Red-Hat-AI-Innovation-Team/sdg_hub to leaderboard ([ambient-code#279](https://github.com/patrickstrick/agentready/issues/279)) ([5b71392](5b71392))
* add release pipeline coldstart prompt ([ambient-code#19](https://github.com/patrickstrick/agentready/issues/19)) ([9a3880c](9a3880c)), closes [ambient-code#18](https://github.com/patrickstrick/agentready/issues/18)
* Add Repomix integration for AI-friendly repository context generation ([ambient-code#29](https://github.com/patrickstrick/agentready/issues/29)) ([92bdde1](92bdde1)), closes [ambient-code#24](https://github.com/patrickstrick/agentready/issues/24) [ambient-code#1](https://github.com/patrickstrick/agentready/issues/1) [ambient-code#25](https://github.com/patrickstrick/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/patrickstrick/agentready/issues/28)) ([7a8b34a](7a8b34a))
* Add research report management CLI commands ([ambient-code#45](https://github.com/patrickstrick/agentready/issues/45)) ([e1be488](e1be488)), closes [ambient-code#7](https://github.com/patrickstrick/agentready/issues/7)
* Add security & quality improvements from code review ([ambient-code#40](https://github.com/patrickstrick/agentready/issues/40)) ([13cd3ca](13cd3ca))
* Add security & quality improvements from code review ([ambient-code#49](https://github.com/patrickstrick/agentready/issues/49)) ([889d6ed](889d6ed))
* Add SWE-bench experiment system for validating AgentReady impact ([ambient-code#124](https://github.com/patrickstrick/agentready/issues/124)) ([15edbba](15edbba))
* Add weekly research update skill and automation ([ambient-code#145](https://github.com/patrickstrick/agentready/issues/145)) ([7ba17a6](7ba17a6))
* **assessors:** implement File Size Limits assessor (Tier 2) ([ambient-code#141](https://github.com/patrickstrick/agentready/issues/141)) ([248467f](248467f))
* **assessors:** support AGENTS.md and @ references in CLAUDEmdAssessor ([ambient-code#265](https://github.com/patrickstrick/agentready/issues/265)) ([450ec25](450ec25)), closes [ambient-code#244](https://github.com/patrickstrick/agentready/issues/244)
* Auto-sync CLAUDE.md during semantic-release ([ambient-code#101](https://github.com/patrickstrick/agentready/issues/101)) ([36b48cb](36b48cb))
* automate PyPI publishing with trusted publishing (OIDC) ([ambient-code#154](https://github.com/patrickstrick/agentready/issues/154)) ([71f4632](71f4632)), closes [pypa/#action-pypi-publish](https://github.com/patrickstrick/agentready/issues/action-pypi-publish)
* Batch Report Enhancements + Bootstrap Template Inheritance (Phase 2 Task 5) ([ambient-code#133](https://github.com/patrickstrick/agentready/issues/133)) ([7762b23](7762b23))
* centralize Claude instructions via AGENTS.md and add init redirect tests ([ambient-code#273](https://github.com/patrickstrick/agentready/issues/273)) ([92c8f3f](92c8f3f))
* Community Leaderboard for AgentReady Scores ([ambient-code#146](https://github.com/patrickstrick/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/patrickstrick/agentready/issues/217)) ([717ca6b](717ca6b)), closes [ambient-code#221](https://github.com/patrickstrick/agentready/issues/221)
* container support ([ambient-code#171](https://github.com/patrickstrick/agentready/issues/171)) ([c6874ea](c6874ea))
* convert AgentReady assessment to on-demand workflow ([ambient-code#213](https://github.com/patrickstrick/agentready/issues/213)) ([b5a1ce0](b5a1ce0)), closes [ambient-code#191](https://github.com/patrickstrick/agentready/issues/191)
* enhance assessors with multi-language support and security ([ambient-code#200](https://github.com/patrickstrick/agentready/issues/200)) ([85712f2](85712f2)), closes [ambient-code#10](https://github.com/patrickstrick/agentready/issues/10)
* Harbor framework integration for Terminal-Bench evaluations ([ambient-code#202](https://github.com/patrickstrick/agentready/issues/202)) ([d73a8c8](d73a8c8)), closes [ambient-code#4](https://github.com/patrickstrick/agentready/issues/4) [ambient-code#178](https://github.com/patrickstrick/agentready/issues/178)
* Implement AgentReady MVP with scoring engine ([54a96cb](54a96cb))
* Implement align subcommand for automated remediation (Issue [ambient-code#14](https://github.com/patrickstrick/agentready/issues/14)) ([ambient-code#34](https://github.com/patrickstrick/agentready/issues/34)) ([06f04dc](06f04dc))
* Implement ArchitectureDecisionsAssessor (fixes [ambient-code#81](https://github.com/patrickstrick/agentready/issues/81)) ([ambient-code#89](https://github.com/patrickstrick/agentready/issues/89)) ([9e782e5](9e782e5))
* implement automated semantic release pipeline ([ambient-code#20](https://github.com/patrickstrick/agentready/issues/20)) ([b579235](b579235))
* implement bootstrap command for GitHub infrastructure ([0af06c4](0af06c4)), closes [ambient-code#2](https://github.com/patrickstrick/agentready/issues/2)
* Implement BranchProtectionAssessor stub (fixes [ambient-code#86](https://github.com/patrickstrick/agentready/issues/86)) ([ambient-code#98](https://github.com/patrickstrick/agentready/issues/98)) ([44c4b17](44c4b17))
* Implement CICDPipelineVisibilityAssessor (fixes [ambient-code#85](https://github.com/patrickstrick/agentready/issues/85)) ([ambient-code#91](https://github.com/patrickstrick/agentready/issues/91)) ([e68285c](e68285c))
* Implement CodeSmellsAssessor stub (fixes [ambient-code#87](https://github.com/patrickstrick/agentready/issues/87)) ([ambient-code#99](https://github.com/patrickstrick/agentready/issues/99)) ([f06b2a8](f06b2a8))
* Implement ConciseDocumentationAssessor (fixes [ambient-code#76](https://github.com/patrickstrick/agentready/issues/76)) ([ambient-code#93](https://github.com/patrickstrick/agentready/issues/93)) ([c356cd5](c356cd5))
* Implement InlineDocumentationAssessor (fixes [ambient-code#77](https://github.com/patrickstrick/agentready/issues/77)) ([ambient-code#94](https://github.com/patrickstrick/agentready/issues/94)) ([e56e570](e56e570))
* Implement IssuePRTemplatesAssessor (fixes [ambient-code#84](https://github.com/patrickstrick/agentready/issues/84)) ([ambient-code#90](https://github.com/patrickstrick/agentready/issues/90)) ([819d7b7](819d7b7))
* Implement multi-repository batch assessment (Phase 1 of issue [ambient-code#68](https://github.com/patrickstrick/agentready/issues/68)) ([ambient-code#74](https://github.com/patrickstrick/agentready/issues/74)) ([befc0d5](befc0d5))
* Implement OneCommandSetupAssessor (fixes [ambient-code#75](https://github.com/patrickstrick/agentready/issues/75)) ([ambient-code#88](https://github.com/patrickstrick/agentready/issues/88)) ([668ba1b](668ba1b))
* Implement OpenAPISpecsAssessor (fixes [ambient-code#80](https://github.com/patrickstrick/agentready/issues/80)) ([ambient-code#97](https://github.com/patrickstrick/agentready/issues/97)) ([45ae36e](45ae36e))
* implement Phase 2 multi-repository assessment reporting ([ambient-code#117](https://github.com/patrickstrick/agentready/issues/117)) ([8da56c2](8da56c2)), closes [ambient-code#69](https://github.com/patrickstrick/agentready/issues/69)
* implement report schema versioning ([ambient-code#43](https://github.com/patrickstrick/agentready/issues/43)) ([4c4752c](4c4752c))
* Implement SemanticNamingAssessor (fixes [ambient-code#82](https://github.com/patrickstrick/agentready/issues/82)) ([ambient-code#95](https://github.com/patrickstrick/agentready/issues/95)) ([d87a280](d87a280))
* Implement SeparationOfConcernsAssessor (fixes [ambient-code#78](https://github.com/patrickstrick/agentready/issues/78)) ([ambient-code#92](https://github.com/patrickstrick/agentready/issues/92)) ([99bfe28](99bfe28))
* Implement StructuredLoggingAssessor (fixes [ambient-code#79](https://github.com/patrickstrick/agentready/issues/79)) ([ambient-code#96](https://github.com/patrickstrick/agentready/issues/96)) ([2b87ca7](2b87ca7))
* integrate ACL file with Claude Code Action allowed_users ([ambient-code#261](https://github.com/patrickstrick/agentready/issues/261)) ([fe52489](fe52489))
* Phase 1 Task 1 - Consolidate Security Validation Patterns ([ambient-code#129](https://github.com/patrickstrick/agentready/issues/129)) ([8580c45](8580c45)), closes [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122) [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122) [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122)
* Phase 1 Tasks 2-3 - Consolidate Reporter Base & Assessor Factory ([ambient-code#131](https://github.com/patrickstrick/agentready/issues/131)) ([8e12bf9](8e12bf9)), closes [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122) [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122) [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122) [ambient-code#122](https://github.com/patrickstrick/agentready/issues/122)
* Phase 2 Task 4 - Replace manual config validation with Pydantic ([ambient-code#134](https://github.com/patrickstrick/agentready/issues/134)) ([d83cf58](d83cf58))
* Redesign homepage features with two-column layout and research links ([ambient-code#189](https://github.com/patrickstrick/agentready/issues/189)) ([570087d](570087d)), closes [ambient-code#187](https://github.com/patrickstrick/agentready/issues/187)
* redesign HTML report with dark theme and larger fonts ([ambient-code#39](https://github.com/patrickstrick/agentready/issues/39)) ([59f6702](59f6702)), closes [#8b5cf6](https://github.com/patrickstrick/agentready/issues/8b5cf6) [#XX](https://github.com/patrickstrick/agentready/issues/XX)
* Rename 'learn' command to 'extract-skills' for clarity ([ambient-code#125](https://github.com/patrickstrick/agentready/issues/125)) ([64d6563](64d6563)), closes [hi#scoring](https://github.com/hi/issues/scoring) [ambient-code#123](https://github.com/patrickstrick/agentready/issues/123)
* replace markdown-link-check with lychee for link validation ([ambient-code#177](https://github.com/patrickstrick/agentready/issues/177)) ([f1a4545](f1a4545))
* Standardize on Python 3.12+ with forward compatibility for 3.13 ([ambient-code#132](https://github.com/patrickstrick/agentready/issues/132)) ([84f2c46](84f2c46))
* **submit:** add --gh flag for gh CLI-based submission ([ambient-code#278](https://github.com/patrickstrick/agentready/issues/278)) ([48bb624](48bb624))
* Terminal-Bench eval harness (MVP Phase 1) ([ambient-code#178](https://github.com/patrickstrick/agentready/issues/178)) ([d06bab4](d06bab4)), closes [ambient-code#171](https://github.com/patrickstrick/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/patrickstrick/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