# Code of AI Conduct

This project accepts AI-assisted contributions, but contributors remain fully
responsible for the changes they submit.

## Requirements

- Use AI as a tool, not as an authority. Verify behavior, correctness, and
  compatibility yourself before submitting changes.
- Any large changes to library code (~>100 lines) must be fully reviewed by
  two humans: the producer and a second reviewer.
- Keep changes narrow. Do not use AI to generate broad rewrites, drive-by
  refactors, or style-only churn.
- Preserve HarfBuzz's public API and ABI unless a change explicitly calls for
  it.
- Follow the repository guidance in [`AGENTS.md`](AGENTS.md),
  [`README.md`](README.md), [`BUILD.md`](BUILD.md), [`TESTING.md`](TESTING.md),
  and related local documentation.
- Do not submit generated code, text, or tests that you do not understand.
- Do not fabricate benchmarks, bug reports, test results, or reproduction
  steps.
- Do not paste private code, non-public fonts, credentials, tokens, or other
  confidential material into external AI systems.
- Respect licensing and attribution requirements. Do not submit AI-generated
  content that may have unclear provenance or incompatible licensing.

## Attribution

- When AI tools contributed meaningfully to a change, add an `Assisted-by:`
  trailer to the commit message (e.g. `Assisted-by: Claude`). Routine use of
  autocompletion or spelling correction does not require attribution.

## Pull requests

- Describe what was verified locally, including the exact build or test commands
  you ran.
- Call out uncertainty, skipped validation, or areas that need extra review.
- Be prepared to revise or discard AI-generated changes that do not meet the
  project's standards.

## Maintainer expectations

- Review AI-assisted contributions by the same technical standards as any other
  contribution.
- Prefer reproducible fixes, focused diffs, and adequate tests over volume.
- Reject changes that appear to be unreviewed AI output, including changes that
  add unnecessary complexity, invent behavior, or ignore repository guidance.

In short: if AI helped produce a change, a human contributor must still own the
result end to end.
