Skip to content

ci: harden CI/CD pipeline#92

Merged
Aureliolo merged 6 commits intomainfrom
ci/harden-pipeline
Mar 1, 2026
Merged

ci: harden CI/CD pipeline#92
Aureliolo merged 6 commits intomainfrom
ci/harden-pipeline

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

@Aureliolo Aureliolo commented Mar 1, 2026

Summary

  • mypy on tests/: CI now type-checks tests/ alongside src/ (PR fix: enforce strict mypy on test files #89 enforced strict mypy locally but CI only ran on src/)
  • Secret scanning: New secret-scan.yml workflow runs gitleaks on push/PR + weekly Monday 3am UTC (gitleaks is skipped in pre-commit CI)
  • Codecov integration: Replaces coverage artifact uploads with Codecov for PR comments, trend tracking, and badges
  • Dependency review hardened: Added license allow-list (permissive only) and PR comment summaries
  • Dependabot tuned: Added commit-message prefixes (chore/ci), increased PR limit to 10, kept daily schedule
  • Auto-merge removed: Deleted dependabot-auto-merge.yml — no auto-merging of anything
  • Security hardening: Top-level permissions: {} deny-all, per-job contents: read, persist-credentials: false on all checkouts
  • Smarter concurrency: Only cancels stale PR runs, not main branch pushes
  • Manual trigger: Added workflow_dispatch for manual CI runs from GitHub UI

Test plan

  • CI runs successfully on this PR (lint, type-check, test jobs)
  • Verify mypy catches type errors in tests/ files
  • Verify Codecov posts coverage comment on PR (requires CODECOV_TOKEN secret)
  • Verify secret-scan workflow appears in Actions tab
  • Verify dependency-review posts comment on PR
  • Verify no auto-merge workflow exists
  • Check Dependabot Settings page shows no errors after merge

- Run mypy on tests/ in addition to src/ (enforcement was local-only)
- Add gitleaks secret scanning workflow (push/PR + weekly schedule)
- Integrate Codecov for coverage reporting (replaces artifact uploads)
- Tighten dependency review with AGPL license deny-list and PR comments
- Add commit-message prefixes and PR limit to Dependabot config
- Remove Dependabot auto-merge workflow (no auto-merging)
- Add top-level permissions: {} deny-all default with per-job grants
- Add persist-credentials: false on all checkout steps
- Smarter concurrency (only cancel stale PR runs, not main pushes)
- Add workflow_dispatch trigger for manual CI runs
Copilot AI review requested due to automatic review settings March 1, 2026 17:35
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 1, 2026

Warning

Rate limit exceeded

@Aureliolo has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 9 minutes and 40 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 5fbe04e and 2e0a445.

📒 Files selected for processing (5)
  • .claude/skills/aurelio-review-pr/skill.md
  • .github/workflows/ci.yml
  • .github/workflows/dependency-review.yml
  • .github/workflows/secret-scan.yml
  • CLAUDE.md
📝 Walkthrough

Walkthrough

The pull request updates GitHub Actions workflows and Dependabot configuration to enhance CI/CD security, dependency management, and code quality. Changes include adding secret scanning with gitleaks, expanding type checking to test files, integrating Codecov for coverage reporting, removing Dependabot auto-merge automation, and restricting concurrent dependency updates.

Changes

Cohort / File(s) Summary
Dependabot Configuration
.github/dependabot.yml
Added commit-message prefixes ("chore" and "ci") and concurrent update limits (open-pull-requests-limit: 10) to update blocks.
CI/CD Workflow Updates
.github/workflows/ci.yml
Added workflow_dispatch trigger, updated concurrency configuration with conditional cancel-in-progress, implemented per-job permissions, added persist-credentials: false to checkout steps, expanded type checking to include tests/ directory, and replaced artifact-based coverage upload with Codecov integration (codecov-action v5).
Security & Dependency Review
.github/workflows/dependency-review.yml, .github/workflows/secret-scan.yml
Added pull-request write permissions and PR comment summaries for dependency review with AGPL license denials; introduced new Secret Scan workflow using gitleaks (v8.24.3) for secret detection on pushes, PRs, and weekly schedule.
Removed Automation
.github/workflows/dependabot-auto-merge.yml
Deleted the Dependabot auto-merge workflow that previously auto-merged minor and patch version updates.
Documentation
CLAUDE.md
Updated documentation to reflect changes to CI configuration, new auxiliary workflows (secret scanning, dependency review, Codecov integration), and Dependabot policy updates.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'ci: harden CI/CD pipeline' accurately summarizes the main objective of the changeset, which adds multiple security and CI/CD improvements across workflow files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed The pull request description comprehensively details all changes: mypy on tests/, secret scanning, Codecov integration, dependency review hardening, Dependabot tuning, auto-merge removal, security hardening, concurrency improvements, and manual workflow trigger.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ci/harden-pipeline

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 1, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

  • .github/workflows/dependabot-auto-merge.yml

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the project's CI/CD pipeline by integrating robust security measures, improving code quality checks, and refining automation workflows. Key updates include comprehensive type-checking for tests, proactive secret scanning, and detailed code coverage reporting via Codecov. Additionally, it optimizes dependency management with refined Dependabot settings and strengthens overall workflow security and efficiency.

Highlights

  • Mypy Type-Checking: CI now type-checks the tests/ directory in addition to src/, ensuring broader type safety.
  • Secret Scanning: A new secret-scan.yml workflow has been introduced to run gitleaks on push/PR events and on a weekly schedule, enhancing security.
  • Codecov Integration: Coverage artifact uploads have been replaced with Codecov integration, providing PR comments, trend tracking, and badges for code coverage.
  • Hardened Dependency Review: The dependency review process now includes an AGPL license deny-list and provides PR comment summaries for better oversight.
  • Tuned Dependabot: Dependabot configurations were updated to add commit-message prefixes (chore/ci) and increase the open pull request limit to 10.
  • Auto-merge Removed: The dependabot-auto-merge.yml workflow has been deleted, disabling automatic merging of dependencies.
  • Security Hardening: Implemented top-level permissions: {} to deny all, per-job contents: read, and persist-credentials: false on all checkouts for enhanced security.
  • Smarter Concurrency: Concurrency settings were adjusted to only cancel stale PR runs, preventing cancellations of main branch pushes.
  • Manual Trigger: Added workflow_dispatch to allow manual CI runs directly from the GitHub UI.
Changelog
  • .github/dependabot.yml
    • Added commit-message prefixes 'chore' and 'ci' for uv and github-actions updates, respectively.
    • Increased open-pull-requests-limit to 10 for both uv and github-actions updates.
  • CLAUDE.md
    • Updated the 'CI' section to reflect that mypy now type-checks src/ and tests/.
    • Modified the Dependabot description to mention grouped minor/patch updates and the removal of auto-merge.
    • Added new entries for 'Secret scanning', 'Dependency review', and 'Coverage' to detail the new CI features.
Ignored Files
  • Ignored by pattern: .github/workflows/** (4)
    • .github/workflows/ci.yml
    • .github/workflows/dependabot-auto-merge.yml
    • .github/workflows/dependency-review.yml
    • .github/workflows/secret-scan.yml
Activity
  • No human activity has been recorded on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR hardens the CI/CD pipeline by adding secret scanning, improving security posture with least-privilege permissions, replacing artifact-based coverage uploads with Codecov, removing auto-merge, and extending mypy type-checking to include tests/.

Changes:

  • Security hardening: Top-level permissions: {} deny-all with per-job overrides, persist-credentials: false on all checkouts, removal of dependabot-auto-merge.yml
  • New workflows / integrations: secret-scan.yml (gitleaks), Codecov coverage upload replaces artifact upload, AGPL license deny-listing and PR comment summaries in dependency review
  • CI refinements: workflow_dispatch manual trigger, smarter concurrency (cancel-in-progress only for PRs), mypy src/ tests/, Dependabot commit-message prefixes and increased PR limit

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
.github/workflows/ci.yml Adds security hardening, workflow_dispatch, smarter concurrency, extends mypy to tests/, replaces artifact upload with Codecov
.github/workflows/secret-scan.yml New workflow running gitleaks on push/PR/schedule
.github/workflows/dependency-review.yml Adds AGPL license deny-list, PR comment summaries, persist-credentials: false
.github/workflows/dependabot-auto-merge.yml Deleted — removes auto-merging
.github/dependabot.yml Adds commit-message prefixes, increases PR limit to 10
CLAUDE.md Updates CI section to reflect new pipeline capabilities

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +21 to +23
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

gitleaks/gitleaks-action@v2 requires a GITLEAKS_LICENSE secret to run on pull_request events from fork contributors. Without this secret, the action will detect it's running against a fork PR and exit with a warning instead of actually scanning, silently skipping secret detection on the most risky event (untrusted code from external contributors). The GITHUB_TOKEN provided here is insufficient for that use-case.

Either add the GITLEAKS_LICENSE secret to the repository settings (it requires a paid Gitleaks plan), or switch to running gitleaks as a plain CLI step (e.g. install via brew/apt/uv tool install gitleaks and invoke gitleaks detect) which has no license requirement for open-source use and avoids this gap.

Suggested change
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install gitleaks
run: |
curl -sSL https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks-linux-amd64.tar.gz \
| tar xz
sudo mv gitleaks /usr/local/bin/gitleaks
- name: Run gitleaks
run: gitleaks detect --source . --no-git -v

Copilot uses AI. Check for mistakes.
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The checkout step in secret-scan.yml is missing persist-credentials: false. Every other workflow touched in this PR (ci.yml, dependency-review.yml) explicitly sets persist-credentials: false for security hardening. Omitting it here means the Git credentials token is persisted in the runner's global config for the duration of the job, which is inconsistent with the security intent of this PR.

Suggested change
fetch-depth: 0
fetch-depth: 0
persist-credentials: false

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request hardens the CI/CD pipeline by updating Dependabot configuration and documenting the new CI/CD features. The changes in .github/dependabot.yml add commit message prefixes and increase the open pull request limit, which are reasonable adjustments. The updates to CLAUDE.md accurately reflect the broader CI enhancements mentioned in the pull request description, such as expanded type checking, secret scanning, and Codecov integration. The changes appear to be in order and I have no specific feedback on the provided diffs.

- Switch from gitleaks-action (requires paid license for fork PRs) to
  CLI-based gitleaks install (free for OSS, no license gap)
- Add persist-credentials: false to secret-scan checkout (consistency)
- Pin gitleaks version for reproducible builds
- Switch from gitleaks-action (requires paid license for fork PRs) to
  CLI-based gitleaks install (free for OSS, no license gap)
- Add persist-credentials: false to secret-scan checkout (consistency)
- Pin gitleaks version for reproducible builds
- Replace deprecated deny-licenses with allow-licenses allow-list
  (MIT, Apache-2.0, BSD-2/3-Clause, ISC, MPL-2.0, PSF-2.0, etc.)
Copilot AI review requested due to automatic review settings March 1, 2026 17:46
@Aureliolo
Copy link
Copy Markdown
Owner Author

/gemini review @copilot review

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 1, 2026

@Aureliolo I've opened a new pull request, #93, to work on those changes. Once the pull request is ready, I'll request review from you.

Copy link
Copy Markdown

@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: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/secret-scan.yml:
- Around line 24-28: In the "Install gitleaks" workflow step (using
GITLEAKS_VERSION and the gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz artifact)
add checksum verification: download the corresponding checksum file (and
signature if available) from the release, verify the checksum against the
downloaded tarball (e.g., using sha256sum or shasum -a 256) and fail the job on
mismatch, only then extract and move the binary to /usr/local/bin/gitleaks;
ensure the step sequence uses the same GITLEAKS_VERSION variable for both
artifact and checksum URLs and exits non‑zero when verification fails.

In `@CLAUDE.md`:
- Around line 78-83: Update the stale mypy invocation in CLAUDE.md: replace the
referenced local command "uv run mypy src/" with the CI-aligned command that
type-checks both sources and tests (e.g., "uv run mypy src/ tests/") so
documentation matches the CI behavior; locate the mypy quick-start line in
CLAUDE.md and update the text/example to show the new command and, if present,
any explanatory sentence that restricts mypy to only src/.

ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 40a61f4 and 5fbe04e.

📒 Files selected for processing (6)
  • .github/dependabot.yml
  • .github/workflows/ci.yml
  • .github/workflows/dependabot-auto-merge.yml
  • .github/workflows/dependency-review.yml
  • .github/workflows/secret-scan.yml
  • CLAUDE.md
💤 Files with no reviewable changes (1)
  • .github/workflows/dependabot-auto-merge.yml
📜 Review details
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-03-01T10:09:25.209Z
Learnt from: CR
Repo: Aureliolo/ai-company PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-01T10:09:25.209Z
Learning: Use commit message format `<type>: <description>` with types: feat, fix, refactor, docs, test, chore, perf, ci

Applied to files:

  • .github/dependabot.yml
📚 Learning: 2026-02-26T17:43:50.902Z
Learnt from: CR
Repo: Aureliolo/story-factory PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-02-26T17:43:50.902Z
Learning: When making changes that affect architecture, services, key files, settings, or workflows, update the relevant sections of existing documentation (CLAUDE.md, README.md, etc.) to reflect those changes.

Applied to files:

  • CLAUDE.md
🔇 Additional comments (3)
.github/workflows/dependency-review.yml (1)

9-9: Good hardening and policy enforcement in dependency review workflow.

Permissions, credential persistence, AGPL deny-listing, and PR summaries are configured coherently for this job.

Also applies to: 17-18, 24-25

.github/dependabot.yml (1)

10-12: Dependabot policy updates look consistent and valid.

The new commit prefixes and PR cap are well-scoped for automated update flow control.

Based on learnings: Use commit message format <type>: <description> with types: feat, fix, refactor, docs, test, chore, perf, ci.

Also applies to: 15-15, 27-29, 32-32

.github/workflows/ci.yml (1)

8-14: CI hardening changes are solid and internally consistent.

Deny-all defaults, scoped job permissions, persist-credentials: false, PR-only stale-run cancellation, and mypy coverage for tests/ are all correctly aligned.

Also applies to: 20-26, 37-47, 51-53, 58-60

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces several improvements to harden the CI/CD pipeline, including tuning Dependabot, adding secret scanning, and enhancing dependency review. My review focuses on improving the maintainability of the Dependabot configuration and clarifying a potential inconsistency in the updated documentation.

groups:
minor-and-patch:
update-types: [minor, patch]
open-pull-requests-limit: 10
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

To improve maintainability and reduce duplication between the pip and github-actions configurations, consider using YAML anchors. This would centralize the common settings, making future updates easier. Here's an example of how you could refactor this file:

version: 2

updates:
  - &defaults
    directory: "/"
    schedule:
      interval: daily
      time: "06:00"
      timezone: Etc/UTC
    groups:
      minor-and-patch:
        update-types: [minor, patch]
    open-pull-requests-limit: 10
    reviewers:
      - Aureliolo

  - package-ecosystem: pip
    <<: *defaults
    commit-message:
      prefix: "chore"
    labels:
      - dependencies
      - python

  - package-ecosystem: github-actions
    <<: *defaults
    commit-message:
      prefix: "ci"
    labels:
      - dependencies
      - ci

- **Dependabot**: daily uv + github-actions updates, auto-merge for patch/minor
- **Dependabot**: daily uv + github-actions updates, grouped minor/patch, no auto-merge
- **Secret scanning**: gitleaks workflow on push/PR + weekly schedule
- **Dependency review**: license allow-list (permissive only), PR comment summaries
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

There appears to be a discrepancy between this line and the PR summary regarding the dependency review setup. This documentation mentions a license allow-list (permissive only), whereas the PR summary states Added AGPL license deny-list. An allow-list of only permissive licenses is significantly more restrictive than a deny-list that only blocks AGPL. To ensure the documentation is accurate, could you clarify which implementation is correct and update accordingly?

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +24 to +28
allow-licenses: >-
MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause,
ISC, MPL-2.0, PSF-2.0, Unlicense, 0BSD,
CC0-1.0, Python-2.0
comment-summary-in-pr: always
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The PR description states "Added AGPL license deny-list" but the actual implementation only uses an allow-licenses list (a permit-only approach). There is no explicit deny-licenses entry. This is fine — a strict allow-list implicitly rejects AGPL and everything else not listed — but the PR description creates a misleading expectation. Additionally, LGPL variants (LGPL-2.0, LGPL-2.1, LGPL-3.0) are absent from the allow-list, which would block any dependency using those licenses. If any transitive dependency is under an LGPL license this workflow will start failing. Consider whether LGPL variants should be included, since they are generally considered permissive for non-copyleft use.

Copilot uses AI. Check for mistakes.
Comment on lines +29 to +30
- name: Run gitleaks
run: gitleaks detect --source . -v
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The gitleaks detect command is run without a --no-git flag or a --log-opts to restrict the scan range. With fetch-depth: 0, this performs a full repository history scan on every push and PR. For large repositories with a long history, this can become very slow. On PRs in particular, consider scoping the scan to only the commits introduced by the PR (e.g., using --log-opts="origin/main..HEAD") to reduce scanning time and noise from historical false positives, while keeping the weekly full-history scheduled scan as-is.

Suggested change
- name: Run gitleaks
run: gitleaks detect --source . -v
- name: Run gitleaks (scheduled full scan)
if: github.event_name == 'schedule'
run: gitleaks detect --source . -v
- name: Run gitleaks (push full scan)
if: github.event_name == 'push'
run: gitleaks detect --source . -v
- name: Run gitleaks (PR incremental scan)
if: github.event_name == 'pull_request'
run: gitleaks detect --source . -v --log-opts="origin/main..HEAD"

Copilot uses AI. Check for mistakes.
Comment on lines +26 to +27
curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \
| tar xz
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The secret-scan.yml workflow installs gitleaks by downloading a binary from GitHub via curl with no checksum verification. If the remote release asset is tampered with or the download URL is compromised (e.g., via a CDN-level attack), a malicious binary would be silently executed with sudo privileges. Consider verifying the SHA256 checksum of the downloaded archive against a known-good value (published in gitleaks' release assets as checksums.txt) before extracting and installing.

Suggested change
curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \
| tar xz
set -euo pipefail
ARCHIVE="gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz"
CHECKSUMS_URL="https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/checksums.txt"
ARCHIVE_URL="https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/${ARCHIVE}"
curl -sSLo "${ARCHIVE}" "${ARCHIVE_URL}"
curl -sSLo checksums.txt "${CHECKSUMS_URL}"
grep " ${ARCHIVE}\$" checksums.txt | sha256sum -c -
tar xzf "${ARCHIVE}"

Copilot uses AI. Check for mistakes.
…t, and Gemini

- CLAUDE.md: align mypy Quick Command with CI (src/ tests/)
- secret-scan: add SHA-256 checksum verification for gitleaks binary
- secret-scan: scope PR scans to changed commits via --log-opts
- secret-scan: add branch filter on pull_request trigger
- ci: pin codecov-action to commit SHA instead of tag
- ci: add explicit permissions: {} on ci-pass job
- PR description: corrected "AGPL deny-list" to "license allow-list"
- skill: add CI check phase (Phase 10) to aurelio-review-pr
@Aureliolo Aureliolo requested a review from Copilot March 1, 2026 17:57
@Aureliolo
Copy link
Copy Markdown
Owner Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request makes several improvements to the CI/CD pipeline configuration and documentation. The changes to dependabot.yml effectively tune the behavior of dependency updates. The documentation updates align with the overall goal of hardening the CI pipeline. I have one suggestion to improve the transparency of a shell command in the process documentation. The review is based on the provided changes to dependabot.yml and markdown files.

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +35 to +37
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
gitleaks detect --source . -v --log-opts="origin/${{ github.base_ref }}..HEAD"
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The ${{ github.base_ref }} expression is interpolated directly into the shell script, which is an injection vector. GitHub's security hardening guide recommends passing context values through environment variables instead of inlining them in run: blocks. While github.base_ref is provided by GitHub infrastructure (not user-controlled) and the branch filter constrains it to main, the safe pattern is to bind it to an env variable and reference $BASE_REF in the shell. Inline context interpolation in run: is the pattern that causes script injection vulnerabilities when the context value comes from less-trusted sources (e.g., PR titles, branch names from forks), so avoiding it consistently is important to set the right precedent.

Suggested change
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
gitleaks detect --source . -v --log-opts="origin/${{ github.base_ref }}..HEAD"
env:
EVENT_NAME: ${{ github.event_name }}
BASE_REF: ${{ github.base_ref }}
run: |
if [ "$EVENT_NAME" = "pull_request" ]; then
gitleaks detect --source . -v --log-opts="origin/$BASE_REF..HEAD"

Copilot uses AI. Check for mistakes.
Comment on lines +11 to +17
permissions:
contents: read

jobs:
gitleaks:
name: Gitleaks
runs-on: ubuntu-latest
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The secret-scan.yml workflow uses a workflow-level permissions: contents: read directly, rather than the deny-all (permissions: {}) at the top level with an explicit per-job permissions: contents: read override that is the established convention in this repo's ci.yml. This deviates from the hardened pattern and is inconsistent with ci.yml lines 10 and 20-21. The workflow-level permissions apply to all jobs, but the deny-all + per-job pattern makes scope explicit and reduces the blast radius if a new job is added without permission consideration.

Suggested change
permissions:
contents: read
jobs:
gitleaks:
name: Gitleaks
runs-on: ubuntu-latest
permissions: {}
jobs:
gitleaks:
name: Gitleaks
runs-on: ubuntu-latest
permissions:
contents: read

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +9
permissions:
contents: read
pull-requests: write
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The dependency-review.yml workflow uses a workflow-level permissions: block directly, rather than the deny-all (permissions: {}) at the top level with per-job overrides that is the convention established in ci.yml (lines 10, 20-21, 37-38, 51-52). For a single-job workflow that also needs pull-requests: write, the hardened equivalent would be permissions: {} at the top and permissions: { contents: read, pull-requests: write } on the dependency-review job.

Copilot uses AI. Check for mistakes.
- secret-scan: use env vars instead of inline context interpolation
- secret-scan: deny-all permissions with per-job override
- dependency-review: deny-all permissions with per-job override
@Aureliolo Aureliolo merged commit ce4693c into main Mar 1, 2026
7 checks passed
@Aureliolo Aureliolo deleted the ci/harden-pipeline branch March 1, 2026 18:02
Aureliolo added a commit that referenced this pull request Mar 10, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.1.1](ai-company-v0.1.0...ai-company-v0.1.1)
(2026-03-10)


### Features

* add autonomy levels and approval timeout policies
([#42](#42),
[#126](#126))
([#197](#197))
([eecc25a](eecc25a))
* add CFO cost optimization service with anomaly detection, reports, and
approval decisions
([#186](#186))
([a7fa00b](a7fa00b))
* add code quality toolchain (ruff, mypy, pre-commit, dependabot)
([#63](#63))
([36681a8](36681a8))
* add configurable cost tiers and subscription/quota-aware tracking
([#67](#67))
([#185](#185))
([9baedfa](9baedfa))
* add container packaging, Docker Compose, and CI pipeline
([#269](#269))
([435bdfe](435bdfe)),
closes [#267](#267)
* add coordination error taxonomy classification pipeline
([#146](#146))
([#181](#181))
([70c7480](70c7480))
* add cost-optimized, hierarchical, and auction assignment strategies
([#175](#175))
([ce924fa](ce924fa)),
closes [#173](#173)
* add design specification, license, and project setup
([8669a09](8669a09))
* add env var substitution and config file auto-discovery
([#77](#77))
([7f53832](7f53832))
* add FastestStrategy routing + vendor-agnostic cleanup
([#140](#140))
([09619cb](09619cb)),
closes [#139](#139)
* add HR engine and performance tracking
([#45](#45),
[#47](#47))
([#193](#193))
([2d091ea](2d091ea))
* add issue auto-search and resolution verification to PR review skill
([#119](#119))
([deecc39](deecc39))
* add memory retrieval, ranking, and context injection pipeline
([#41](#41))
([873b0aa](873b0aa))
* add pluggable MemoryBackend protocol with models, config, and events
([#180](#180))
([46cfdd4](46cfdd4))
* add pluggable MemoryBackend protocol with models, config, and events
([#32](#32))
([46cfdd4](46cfdd4))
* add pluggable PersistenceBackend protocol with SQLite implementation
([#36](#36))
([f753779](f753779))
* add progressive trust and promotion/demotion subsystems
([#43](#43),
[#49](#49))
([3a87c08](3a87c08))
* add retry handler, rate limiter, and provider resilience
([#100](#100))
([b890545](b890545))
* add SecOps security agent with rule engine, audit log, and ToolInvoker
integration ([#40](#40))
([83b7b6c](83b7b6c))
* add shared org memory and memory consolidation/archival
([#125](#125),
[#48](#48))
([4a0832b](4a0832b))
* design unified provider interface
([#86](#86))
([3e23d64](3e23d64))
* expand template presets, rosters, and add inheritance
([#80](#80),
[#81](#81),
[#84](#84))
([15a9134](15a9134))
* implement agent runtime state vs immutable config split
([#115](#115))
([4cb1ca5](4cb1ca5))
* implement AgentEngine core orchestrator
([#11](#11))
([#143](#143))
([f2eb73a](f2eb73a))
* implement basic tool system (registry, invocation, results)
([#15](#15))
([c51068b](c51068b))
* implement built-in file system tools
([#18](#18))
([325ef98](325ef98))
* implement communication foundation — message bus, dispatcher, and
messenger ([#157](#157))
([8e71bfd](8e71bfd))
* implement company template system with 7 built-in presets
([#85](#85))
([cbf1496](cbf1496))
* implement conflict resolution protocol
([#122](#122))
([#166](#166))
([e03f9f2](e03f9f2))
* implement core entity and role system models
([#69](#69))
([acf9801](acf9801))
* implement crash recovery with fail-and-reassign strategy
([#149](#149))
([e6e91ed](e6e91ed))
* implement engine extensions — Plan-and-Execute loop and call
categorization
([#134](#134),
[#135](#135))
([#159](#159))
([9b2699f](9b2699f))
* implement enterprise logging system with structlog
([#73](#73))
([2f787e5](2f787e5))
* implement graceful shutdown with cooperative timeout strategy
([#130](#130))
([6592515](6592515))
* implement hierarchical delegation and loop prevention
([#12](#12),
[#17](#17))
([6be60b6](6be60b6))
* implement LiteLLM driver and provider registry
([#88](#88))
([ae3f18b](ae3f18b)),
closes [#4](#4)
* implement LLM decomposition strategy and workspace isolation
([#174](#174))
([aa0eefe](aa0eefe))
* implement meeting protocol system
([#123](#123))
([ee7caca](ee7caca))
* implement message and communication domain models
([#74](#74))
([560a5d2](560a5d2))
* implement model routing engine
([#99](#99))
([d3c250b](d3c250b))
* implement parallel agent execution
([#22](#22))
([#161](#161))
([65940b3](65940b3))
* implement per-call cost tracking service
([#7](#7))
([#102](#102))
([c4f1f1c](c4f1f1c))
* implement personality injection and system prompt construction
([#105](#105))
([934dd85](934dd85))
* implement single-task execution lifecycle
([#21](#21))
([#144](#144))
([c7e64e4](c7e64e4))
* implement subprocess sandbox for tool execution isolation
([#131](#131))
([#153](#153))
([3c8394e](3c8394e))
* implement task assignment subsystem with pluggable strategies
([#172](#172))
([c7f1b26](c7f1b26)),
closes [#26](#26)
[#30](#30)
* implement task decomposition and routing engine
([#14](#14))
([9c7fb52](9c7fb52))
* implement Task, Project, Artifact, Budget, and Cost domain models
([#71](#71))
([81eabf1](81eabf1))
* implement tool permission checking
([#16](#16))
([833c190](833c190))
* implement YAML config loader with Pydantic validation
([#59](#59))
([ff3a2ba](ff3a2ba))
* implement YAML config loader with Pydantic validation
([#75](#75))
([ff3a2ba](ff3a2ba))
* initialize project with uv, hatchling, and src layout
([39005f9](39005f9))
* initialize project with uv, hatchling, and src layout
([#62](#62))
([39005f9](39005f9))
* Litestar REST API, WebSocket feed, and approval queue (M6)
([#189](#189))
([29fcd08](29fcd08))
* make TokenUsage.total_tokens a computed field
([#118](#118))
([c0bab18](c0bab18)),
closes [#109](#109)
* parallel tool execution in ToolInvoker.invoke_all
([#137](#137))
([58517ee](58517ee))
* testing framework, CI pipeline, and M0 gap fixes
([#64](#64))
([f581749](f581749))
* wire all modules into observability system
([#97](#97))
([f7a0617](f7a0617))


### Bug Fixes

* address Greptile post-merge review findings from PRs
[#170](https://github.com/Aureliolo/ai-company/issues/170)-[#175](https://github.com/Aureliolo/ai-company/issues/175)
([#176](#176))
([c5ca929](c5ca929))
* address post-merge review feedback from PRs
[#164](https://github.com/Aureliolo/ai-company/issues/164)-[#167](https://github.com/Aureliolo/ai-company/issues/167)
([#170](#170))
([3bf897a](3bf897a)),
closes [#169](#169)
* enforce strict mypy on test files
([#89](#89))
([aeeff8c](aeeff8c))
* harden Docker sandbox, MCP bridge, and code runner
([#50](#50),
[#53](#53))
([d5e1b6e](d5e1b6e))
* harden git tools security + code quality improvements
([#150](#150))
([000a325](000a325))
* harden subprocess cleanup, env filtering, and shutdown resilience
([#155](#155))
([d1fe1fb](d1fe1fb))
* incorporate post-merge feedback + pre-PR review fixes
([#164](#164))
([c02832a](c02832a))
* pre-PR review fixes for post-merge findings
([#183](#183))
([26b3108](26b3108))
* strengthen immutability for BaseTool schema and ToolInvoker boundaries
([#117](#117))
([7e5e861](7e5e861))


### Performance

* harden non-inferable principle implementation
([#195](#195))
([02b5f4e](02b5f4e)),
closes [#188](#188)


### Refactoring

* adopt NotBlankStr across all models
([#108](#108))
([#120](#120))
([ef89b90](ef89b90))
* extract _SpendingTotals base class from spending summary models
([#111](#111))
([2f39c1b](2f39c1b))
* harden BudgetEnforcer with error handling, validation extraction, and
review fixes
([#182](#182))
([c107bf9](c107bf9))
* harden personality profiles, department validation, and template
rendering ([#158](#158))
([10b2299](10b2299))
* pre-PR review improvements for ExecutionLoop + ReAct loop
([#124](#124))
([8dfb3c0](8dfb3c0))
* split events.py into per-domain event modules
([#136](#136))
([e9cba89](e9cba89))


### Documentation

* add ADR-001 memory layer evaluation and selection
([#178](#178))
([db3026f](db3026f)),
closes [#39](#39)
* add agent scaling research findings to DESIGN_SPEC
([#145](#145))
([57e487b](57e487b))
* add CLAUDE.md, contributing guide, and dev documentation
([#65](#65))
([55c1025](55c1025)),
closes [#54](#54)
* add crash recovery, sandboxing, analytics, and testing decisions
([#127](#127))
([5c11595](5c11595))
* address external review feedback with MVP scope and new protocols
([#128](#128))
([3b30b9a](3b30b9a))
* expand design spec with pluggable strategy protocols
([#121](#121))
([6832db6](6832db6))
* finalize 23 design decisions (ADR-002)
([#190](#190))
([8c39742](8c39742))
* update project docs for M2.5 conventions and add docs-consistency
review agent
([#114](#114))
([99766ee](99766ee))


### Tests

* add e2e single agent integration tests
([#24](#24))
([#156](#156))
([f566fb4](f566fb4))
* add provider adapter integration tests
([#90](#90))
([40a61f4](40a61f4))


### CI/CD

* add Release Please for automated versioning and GitHub Releases
([#278](#278))
([a488758](a488758))
* bump actions/checkout from 4 to 6
([#95](#95))
([1897247](1897247))
* bump actions/upload-artifact from 4 to 7
([#94](#94))
([27b1517](27b1517))
* harden CI/CD pipeline
([#92](#92))
([ce4693c](ce4693c))
* split vulnerability scans into critical-fail and high-warn tiers
([#277](#277))
([aba48af](aba48af))


### Maintenance

* add /worktree skill for parallel worktree management
([#171](#171))
([951e337](951e337))
* add design spec context loading to research-link skill
([8ef9685](8ef9685))
* add post-merge-cleanup skill
([#70](#70))
([f913705](f913705))
* add pre-pr-review skill and update CLAUDE.md
([#103](#103))
([92e9023](92e9023))
* add research-link skill and rename skill files to SKILL.md
([#101](#101))
([651c577](651c577))
* bump aiosqlite from 0.21.0 to 0.22.1
([#191](#191))
([3274a86](3274a86))
* bump pyyaml from 6.0.2 to 6.0.3 in the minor-and-patch group
([#96](#96))
([0338d0c](0338d0c))
* bump ruff from 0.15.4 to 0.15.5
([a49ee46](a49ee46))
* fix M0 audit items
([#66](#66))
([c7724b5](c7724b5))
* pin setup-uv action to full SHA
([#281](#281))
([4448002](4448002))
* post-audit cleanup — PEP 758, loggers, bug fixes, refactoring, tests,
hookify rules
([#148](#148))
([c57a6a9](c57a6a9))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Aureliolo added a commit that referenced this pull request Mar 11, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.1.0](v0.0.0...v0.1.0)
(2026-03-11)


### Features

* add autonomy levels and approval timeout policies
([#42](#42),
[#126](#126))
([#197](#197))
([eecc25a](eecc25a))
* add CFO cost optimization service with anomaly detection, reports, and
approval decisions
([#186](#186))
([a7fa00b](a7fa00b))
* add code quality toolchain (ruff, mypy, pre-commit, dependabot)
([#63](#63))
([36681a8](36681a8))
* add configurable cost tiers and subscription/quota-aware tracking
([#67](#67))
([#185](#185))
([9baedfa](9baedfa))
* add container packaging, Docker Compose, and CI pipeline
([#269](#269))
([435bdfe](435bdfe)),
closes [#267](#267)
* add coordination error taxonomy classification pipeline
([#146](#146))
([#181](#181))
([70c7480](70c7480))
* add cost-optimized, hierarchical, and auction assignment strategies
([#175](#175))
([ce924fa](ce924fa)),
closes [#173](#173)
* add design specification, license, and project setup
([8669a09](8669a09))
* add env var substitution and config file auto-discovery
([#77](#77))
([7f53832](7f53832))
* add FastestStrategy routing + vendor-agnostic cleanup
([#140](#140))
([09619cb](09619cb)),
closes [#139](#139)
* add HR engine and performance tracking
([#45](#45),
[#47](#47))
([#193](#193))
([2d091ea](2d091ea))
* add issue auto-search and resolution verification to PR review skill
([#119](#119))
([deecc39](deecc39))
* add mandatory JWT + API key authentication
([#256](#256))
([c279cfe](c279cfe))
* add memory retrieval, ranking, and context injection pipeline
([#41](#41))
([873b0aa](873b0aa))
* add pluggable MemoryBackend protocol with models, config, and events
([#180](#180))
([46cfdd4](46cfdd4))
* add pluggable MemoryBackend protocol with models, config, and events
([#32](#32))
([46cfdd4](46cfdd4))
* add pluggable output scan response policies
([#263](#263))
([b9907e8](b9907e8))
* add pluggable PersistenceBackend protocol with SQLite implementation
([#36](#36))
([f753779](f753779))
* add progressive trust and promotion/demotion subsystems
([#43](#43),
[#49](#49))
([3a87c08](3a87c08))
* add retry handler, rate limiter, and provider resilience
([#100](#100))
([b890545](b890545))
* add SecOps security agent with rule engine, audit log, and ToolInvoker
integration ([#40](#40))
([83b7b6c](83b7b6c))
* add shared org memory and memory consolidation/archival
([#125](#125),
[#48](#48))
([4a0832b](4a0832b))
* design unified provider interface
([#86](#86))
([3e23d64](3e23d64))
* expand template presets, rosters, and add inheritance
([#80](#80),
[#81](#81),
[#84](#84))
([15a9134](15a9134))
* implement agent runtime state vs immutable config split
([#115](#115))
([4cb1ca5](4cb1ca5))
* implement AgentEngine core orchestrator
([#11](#11))
([#143](#143))
([f2eb73a](f2eb73a))
* implement AuditRepository for security audit log persistence
([#279](#279))
([94bc29f](94bc29f))
* implement basic tool system (registry, invocation, results)
([#15](#15))
([c51068b](c51068b))
* implement built-in file system tools
([#18](#18))
([325ef98](325ef98))
* implement communication foundation — message bus, dispatcher, and
messenger ([#157](#157))
([8e71bfd](8e71bfd))
* implement company template system with 7 built-in presets
([#85](#85))
([cbf1496](cbf1496))
* implement conflict resolution protocol
([#122](#122))
([#166](#166))
([e03f9f2](e03f9f2))
* implement core entity and role system models
([#69](#69))
([acf9801](acf9801))
* implement crash recovery with fail-and-reassign strategy
([#149](#149))
([e6e91ed](e6e91ed))
* implement engine extensions — Plan-and-Execute loop and call
categorization
([#134](#134),
[#135](#135))
([#159](#159))
([9b2699f](9b2699f))
* implement enterprise logging system with structlog
([#73](#73))
([2f787e5](2f787e5))
* implement graceful shutdown with cooperative timeout strategy
([#130](#130))
([6592515](6592515))
* implement hierarchical delegation and loop prevention
([#12](#12),
[#17](#17))
([6be60b6](6be60b6))
* implement LiteLLM driver and provider registry
([#88](#88))
([ae3f18b](ae3f18b)),
closes [#4](#4)
* implement LLM decomposition strategy and workspace isolation
([#174](#174))
([aa0eefe](aa0eefe))
* implement meeting protocol system
([#123](#123))
([ee7caca](ee7caca))
* implement message and communication domain models
([#74](#74))
([560a5d2](560a5d2))
* implement model routing engine
([#99](#99))
([d3c250b](d3c250b))
* implement parallel agent execution
([#22](#22))
([#161](#161))
([65940b3](65940b3))
* implement per-call cost tracking service
([#7](#7))
([#102](#102))
([c4f1f1c](c4f1f1c))
* implement personality injection and system prompt construction
([#105](#105))
([934dd85](934dd85))
* implement single-task execution lifecycle
([#21](#21))
([#144](#144))
([c7e64e4](c7e64e4))
* implement subprocess sandbox for tool execution isolation
([#131](#131))
([#153](#153))
([3c8394e](3c8394e))
* implement task assignment subsystem with pluggable strategies
([#172](#172))
([c7f1b26](c7f1b26)),
closes [#26](#26)
[#30](#30)
* implement task decomposition and routing engine
([#14](#14))
([9c7fb52](9c7fb52))
* implement Task, Project, Artifact, Budget, and Cost domain models
([#71](#71))
([81eabf1](81eabf1))
* implement tool permission checking
([#16](#16))
([833c190](833c190))
* implement YAML config loader with Pydantic validation
([#59](#59))
([ff3a2ba](ff3a2ba))
* implement YAML config loader with Pydantic validation
([#75](#75))
([ff3a2ba](ff3a2ba))
* initialize project with uv, hatchling, and src layout
([39005f9](39005f9))
* initialize project with uv, hatchling, and src layout
([#62](#62))
([39005f9](39005f9))
* Litestar REST API, WebSocket feed, and approval queue (M6)
([#189](#189))
([29fcd08](29fcd08))
* make TokenUsage.total_tokens a computed field
([#118](#118))
([c0bab18](c0bab18)),
closes [#109](#109)
* parallel tool execution in ToolInvoker.invoke_all
([#137](#137))
([58517ee](58517ee))
* testing framework, CI pipeline, and M0 gap fixes
([#64](#64))
([f581749](f581749))
* wire all modules into observability system
([#97](#97))
([f7a0617](f7a0617))


### Bug Fixes

* address Greptile post-merge review findings from PRs
[#170](https://github.com/Aureliolo/ai-company/issues/170)-[#175](https://github.com/Aureliolo/ai-company/issues/175)
([#176](#176))
([c5ca929](c5ca929))
* address post-merge review feedback from PRs
[#164](https://github.com/Aureliolo/ai-company/issues/164)-[#167](https://github.com/Aureliolo/ai-company/issues/167)
([#170](#170))
([3bf897a](3bf897a)),
closes [#169](#169)
* enforce strict mypy on test files
([#89](#89))
([aeeff8c](aeeff8c))
* harden Docker sandbox, MCP bridge, and code runner
([#50](#50),
[#53](#53))
([d5e1b6e](d5e1b6e))
* harden git tools security + code quality improvements
([#150](#150))
([000a325](000a325))
* harden subprocess cleanup, env filtering, and shutdown resilience
([#155](#155))
([d1fe1fb](d1fe1fb))
* incorporate post-merge feedback + pre-PR review fixes
([#164](#164))
([c02832a](c02832a))
* pre-PR review fixes for post-merge findings
([#183](#183))
([26b3108](26b3108))
* resolve circular imports, bump litellm, fix release tag format
([#286](#286))
([a6659b5](a6659b5))
* strengthen immutability for BaseTool schema and ToolInvoker boundaries
([#117](#117))
([7e5e861](7e5e861))


### Performance

* harden non-inferable principle implementation
([#195](#195))
([02b5f4e](02b5f4e)),
closes [#188](#188)


### Refactoring

* adopt NotBlankStr across all models
([#108](#108))
([#120](#120))
([ef89b90](ef89b90))
* extract _SpendingTotals base class from spending summary models
([#111](#111))
([2f39c1b](2f39c1b))
* harden BudgetEnforcer with error handling, validation extraction, and
review fixes
([#182](#182))
([c107bf9](c107bf9))
* harden personality profiles, department validation, and template
rendering ([#158](#158))
([10b2299](10b2299))
* pre-PR review improvements for ExecutionLoop + ReAct loop
([#124](#124))
([8dfb3c0](8dfb3c0))
* split events.py into per-domain event modules
([#136](#136))
([e9cba89](e9cba89))


### Documentation

* add ADR-001 memory layer evaluation and selection
([#178](#178))
([db3026f](db3026f)),
closes [#39](#39)
* add agent scaling research findings to DESIGN_SPEC
([#145](#145))
([57e487b](57e487b))
* add CLAUDE.md, contributing guide, and dev documentation
([#65](#65))
([55c1025](55c1025)),
closes [#54](#54)
* add crash recovery, sandboxing, analytics, and testing decisions
([#127](#127))
([5c11595](5c11595))
* address external review feedback with MVP scope and new protocols
([#128](#128))
([3b30b9a](3b30b9a))
* expand design spec with pluggable strategy protocols
([#121](#121))
([6832db6](6832db6))
* finalize 23 design decisions (ADR-002)
([#190](#190))
([8c39742](8c39742))
* update project docs for M2.5 conventions and add docs-consistency
review agent
([#114](#114))
([99766ee](99766ee))


### Tests

* add e2e single agent integration tests
([#24](#24))
([#156](#156))
([f566fb4](f566fb4))
* add provider adapter integration tests
([#90](#90))
([40a61f4](40a61f4))


### CI/CD

* add Release Please for automated versioning and GitHub Releases
([#278](#278))
([a488758](a488758))
* bump actions/checkout from 4 to 6
([#95](#95))
([1897247](1897247))
* bump actions/upload-artifact from 4 to 7
([#94](#94))
([27b1517](27b1517))
* bump anchore/scan-action from 6.5.1 to 7.3.2
([#271](#271))
([80a1c15](80a1c15))
* bump docker/build-push-action from 6.19.2 to 7.0.0
([#273](#273))
([dd0219e](dd0219e))
* bump docker/login-action from 3.7.0 to 4.0.0
([#272](#272))
([33d6238](33d6238))
* bump docker/metadata-action from 5.10.0 to 6.0.0
([#270](#270))
([baee04e](baee04e))
* bump docker/setup-buildx-action from 3.12.0 to 4.0.0
([#274](#274))
([5fc06f7](5fc06f7))
* bump sigstore/cosign-installer from 3.9.1 to 4.1.0
([#275](#275))
([29dd16c](29dd16c))
* harden CI/CD pipeline
([#92](#92))
([ce4693c](ce4693c))
* split vulnerability scans into critical-fail and high-warn tiers
([#277](#277))
([aba48af](aba48af))


### Maintenance

* add /worktree skill for parallel worktree management
([#171](#171))
([951e337](951e337))
* add design spec context loading to research-link skill
([8ef9685](8ef9685))
* add post-merge-cleanup skill
([#70](#70))
([f913705](f913705))
* add pre-pr-review skill and update CLAUDE.md
([#103](#103))
([92e9023](92e9023))
* add research-link skill and rename skill files to SKILL.md
([#101](#101))
([651c577](651c577))
* bump aiosqlite from 0.21.0 to 0.22.1
([#191](#191))
([3274a86](3274a86))
* bump pyyaml from 6.0.2 to 6.0.3 in the minor-and-patch group
([#96](#96))
([0338d0c](0338d0c))
* bump ruff from 0.15.4 to 0.15.5
([a49ee46](a49ee46))
* fix M0 audit items
([#66](#66))
([c7724b5](c7724b5))
* **main:** release ai-company 0.1.1
([#282](#282))
([2f4703d](2f4703d))
* pin setup-uv action to full SHA
([#281](#281))
([4448002](4448002))
* post-audit cleanup — PEP 758, loggers, bug fixes, refactoring, tests,
hookify rules
([#148](#148))
([c57a6a9](c57a6a9))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Signed-off-by: Aurelio <19254254+Aureliolo@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants