Skip to main content
AgentCompass uses a fork-and-pull-request workflow. This page explains how to prepare one focused change, implement and validate it against the owning contract, and submit a reviewable pull request. Detailed testing and documentation requirements live in their respective guides.

Prepare the Change

Before writing code, confirm the scope and governing contract:
  1. Search existing issues and pull requests for overlapping work.
  2. Read the architecture overview and locate the component that owns the behavior.
  3. Inspect the current implementation, config schema, adjacent components, and public documentation.
  4. When the change depends on an external project, establish the upstream contract from its official repository, API, paper, or provider documentation.
  5. Open an issue or design discussion before a broad contract change or an integration with significant maintenance cost.
Keep each pull request focused on one clear problem. Do not combine unrelated refactors, dependency upgrades, formatting, or feature work. Then follow GitHub’s contributing to a project workflow to fork, clone, and create a branch:
origin should point to your fork, and upstream should point to open-compass/AgentCompass. Name the branch after the change it contains, for example:

Implement and Validate

During implementation:
  • Keep behavior in the component that owns it.
  • Preserve explicit user settings before applying inferred defaults.
  • Add public parameters through the corresponding component config contract.
  • Keep provider and Model calls out of deterministic planning code.
  • Preserve error categories and clean up resources on every exit path.
  • Update documentation in the same pull request when public behavior changes; follow the documentation contribution guide for the detailed rules.
  • Never commit credentials, private endpoints, datasets, container layers, complete result directories, or large generated artifacts.
When changing a component, also meet the completion requirements in its integration guide: Benchmark, Harness, Environment, Recipe, or Analyzer. Organize the work into atomic commits, using the same change-type prefix for commit subjects and pull request titles: Write concise, imperative subjects. Avoid vague messages such as update code or fix issue. If the implementation, Recipe, and documentation can be reviewed independently, commit them separately:
Start with the smallest check that directly exercises the modified contract, then expand according to risk to a representative real task and relevant failure paths. Before requesting review, complete the repository’s required full checks. Record exact redacted commands, relevant versions, important results, and the reasons and risks for any required checks you did not run. Use the testing and validation guide to select checks, task evidence, and boundary cases. For changes to public pages, navigation, examples, or localization, also follow the documentation contribution guide.

Submit the Pull Request

Before opening or updating the pull request, rebase the branch onto the latest upstream/main:
Push a new branch with:
After rebasing a previously published personal feature branch, update that branch with:
Never force-push a shared branch without coordinating with its collaborators. The pull request description should explain:
  • The problem, the scope of this change, and work intentionally left out.
  • The owning component, important design decisions, and user-visible behavior and compatibility before and after the change.
  • Exact redacted reproduction or validation commands, important results, and any necessary artifact evidence.
  • Documentation updated with the implementation.
Before requesting review, complete the pull request checklist.

Handle Dependent Changes

When an integration depends on reusable infrastructure, submit the infrastructure and integration as separate pull requests so the infrastructure remains independently reviewable and reusable:
  1. Create a foundational branch from upstream/main and submit the foundational pull request.
  2. Create the integration branch on top of the foundational branch only for local combined testing and the later integration pull request.
  3. After the foundational pull request merges, rebase the integration branch onto the updated upstream/main.
  4. Inspect the commit range, rerun affected validation, and then update the personal integration branch with --force-with-lease.
Describe only each pull request’s own scope, and state the dependency and merge order. The foundational change must not depend on the Benchmark or Harness that first exercises it.