Conversation
- 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
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the 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. 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughThe 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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned Files
|
Summary of ChangesHello, 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
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe 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
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 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
|
There was a problem hiding this comment.
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: falseon all checkouts, removal ofdependabot-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_dispatchmanual 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.
.github/workflows/secret-scan.yml
Outdated
| - uses: gitleaks/gitleaks-action@v2 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
There was a problem hiding this comment.
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.
| - 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 |
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 |
There was a problem hiding this comment.
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.
| fetch-depth: 0 | |
| fetch-depth: 0 | |
| persist-credentials: false |
There was a problem hiding this comment.
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.)
|
/gemini review @copilot review |
|
@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. |
There was a problem hiding this comment.
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
📒 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.ymlCLAUDE.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 fortests/are all correctly aligned.Also applies to: 20-26, 37-47, 51-53, 58-60
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
| 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 |
There was a problem hiding this comment.
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.
.github/workflows/secret-scan.yml
Outdated
| - name: Run gitleaks | ||
| run: gitleaks detect --source . -v |
There was a problem hiding this comment.
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.
| - 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" |
.github/workflows/secret-scan.yml
Outdated
| curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \ | ||
| | tar xz |
There was a problem hiding this comment.
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.
| 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}" |
…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
|
/gemini review |
There was a problem hiding this comment.
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>
There was a problem hiding this comment.
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.
.github/workflows/secret-scan.yml
Outdated
| run: | | ||
| if [ "${{ github.event_name }}" = "pull_request" ]; then | ||
| gitleaks detect --source . -v --log-opts="origin/${{ github.base_ref }}..HEAD" |
There was a problem hiding this comment.
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.
| 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" |
.github/workflows/secret-scan.yml
Outdated
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| gitleaks: | ||
| name: Gitleaks | ||
| runs-on: ubuntu-latest |
There was a problem hiding this comment.
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.
| permissions: | |
| contents: read | |
| jobs: | |
| gitleaks: | |
| name: Gitleaks | |
| runs-on: ubuntu-latest | |
| permissions: {} | |
| jobs: | |
| gitleaks: | |
| name: Gitleaks | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read |
| permissions: | ||
| contents: read | ||
| pull-requests: write |
There was a problem hiding this comment.
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.
- 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
🤖 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).
🤖 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>
Summary
tests/alongsidesrc/(PR fix: enforce strict mypy on test files #89 enforced strict mypy locally but CI only ran onsrc/)secret-scan.ymlworkflow runs gitleaks on push/PR + weekly Monday 3am UTC (gitleaks is skipped in pre-commit CI)chore/ci), increased PR limit to 10, kept daily scheduledependabot-auto-merge.yml— no auto-merging of anythingpermissions: {}deny-all, per-jobcontents: read,persist-credentials: falseon all checkoutsworkflow_dispatchfor manual CI runs from GitHub UITest plan
tests/filesCODECOV_TOKENsecret)