PR and Documentation Standards
Pull Request Structure
PR Title Format
PR titles must follow Conventional Commits: fix:, feat:, chore:, doc:, test:, refactor:, ci:, etc. The subject after the colon must start with an uppercase letter.
fix: Emit warning when use_effective_fields and auto-scaling are enabled
feat: Add search deployment resource
Do not include a scope in parentheses (e.g. fix(resource/mongodbatlas_advanced_cluster): ...). The repo convention uses the bare prefix without a scope.
Separate Refactoring from Feature Changes
Avoid mixing refactoring with functional changes in the same PR. Reviewers need to clearly distinguish which changed lines are behavioral vs structural.
Changelog Entries
Add a changelog entry (.changelog/<PR_NUMBER>.txt) for:
- Bug fixes (
release-note:bug) - New features (
release-note:enhancement) - Breaking changes (
release-note:breaking-change) - New resources/data sources (
release-note:new-resource/release-note:new-data-source) - Migration guides or user-facing documentation changes
Changelog Entry Format
- Start with a verb in 3rd person singular (e.g.
Emits,Adds,Fixes,Updates) - Do not end with punctuation
Documentation Style Guide
Consolidate Admonitions
Avoid excessive NOTE/IMPORTANT/WARNING boxes. Prefer:
- Inlining short notes into attribute descriptions.
- Combining multiple notes into a single box.
- Downgrading from IMPORTANT to NOTE when the content is informational, not action-required.
CLOUDP Ticket References
Do not include CLOUDP ticket references in user-facing documentation. Internal ticket references are acceptable in code comments only when tracking a deliberate technical decision.
Resource and Data Source Descriptions
Start data source and resource descriptions with the resource name and a clear one-line purpose:
`mongodbatlas_log_integration` provides a resource for managing log integration configurations at the project level.
Examples (examples/ directory)
The following rules are the default for new provider examples. One user journey (flow) stays a flat root with the files listed under Flat vs siblings. Two or more flows use sibling directories. Copy examples/mongodbatlas_cloud_backup_collection_restore_job/ for that layout. Read example-layout.md in this skill directory for the canonical tree, Atlas project comment, common mistakes, and exceptions.
Flat vs siblings
- One flow: Keep files at
examples/mongodbatlas_<name>/(main.tf,variables.tf,providers.tf,versions.tf,README.md). - Two or more flows: Use a parent
README.md(index only, no parentmain.tf) plus sibling directories named for what they do.
Rules
- Use-case directories: Name each example for what it does (
snapshot_restore,pit_restore). Do not use genericsingular-data-source.tf/plural-data-source.tf. - Standalone configs: Each subdirectory is its own root module and depends only on input variables. Do not share Terraform modules across siblings. Do not use
terraform_remote_state. Document cross-example flow in the grouped README; users copy outputs intoterraform.tfvars. - Aligned intro: Each primary
.tffile starts with a one- or two-sentence comment stating the goal. Match the sibling README opening line (the first sentence after the H1, not the H1 itself). - Grouped root README: Parent
README.mdlists siblings, typical flows, and links to the product doc. Collection restore links to Restore from Selected Databases and Collections. Other resources link their own product page. - Docs over duplication: Keep READMEs operational (prerequisites, defaults, tfvars). Link to official MongoDB docs for product limits and semantics.
- Variables: Every user-facing value is a
variablewith adescription. Put defaults invariables.tfand document them in the README. - Outputs: Expose only useful post-apply values (
job_state,collection_states, discovery IDs). Place output blocks in the primary.tffile or the Terraform file for the surface they describe. Use a dedicatedoutputs.tfonly when it makes the example easier to read. Each output has adescription. - Template docs: Never paste HCL into
templates/**/*.md.tmpl. Embed with tffile pointing at a real file underexamples/, for example{{ tffile "examples/mongodbatlas_cloud_backup_collection_restore_job/snapshot_restore/main.tf" }}. Further Examples links point at sibling directories.
Provider baseline
State once, not per sibling:
- No pinned provider version.
- Empty
provider "mongodbatlas" {}. Credentials come from the environment, not from HCL. Do not setclient_id,client_secret,public_key, orprivate_keyon the provider. - README
exportexamples use Service AccountMONGODB_ATLAS_CLIENT_ID/MONGODB_ATLAS_CLIENT_SECRET. Prefer those. Programmatic API keys via env also work. versions.tfsetssource = "mongodb/mongodbatlas"andrequired_versiononly.
New examples use providers.tf. Leave existing provider.tf names alone.