Skip to content

docs(mlops): add first-time contributor checklist (fixes #121) - #163

Open
emberb170d wants to merge 4 commits into
Create-Python-App:mainfrom
emberb170d:mlops-contributor-checklist
Open

docs(mlops): add first-time contributor checklist (fixes #121)#163
emberb170d wants to merge 4 commits into
Create-Python-App:mainfrom
emberb170d:mlops-contributor-checklist

Conversation

@emberb170d

@emberb170demberb170d commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Adds a comprehensive first-time contributor checklist to CONTRIBUTING.md in the mlops-sklearn-starter template.

The checklist covers:

  • Project topology and quality bar requirements
  • CPU-only testing with no network calls
  • Proper use of uv/Ruff/pytest
  • Template registration requirements
  • CI/CT/CD delivery via extensions (not embedded)
  • L1 bare job requirements

This helps newcomers make successful first PRs to MLOps templates by providing
clear, actionable guidelines that align with the MLOps track constraints
from issue #74.

Summary by CodeRabbit

  • Documentation

    • Updated the AI/ML catalog documentation with a link to the shared MLOps template contract.
    • Expanded the contribution guide with a Quick Start section and a comprehensive first-contribution checklist.
  • Template Improvements

    • Standardized formatting expectations across starter templates, including consistent indentation for common configuration files.
    • Added Python 3.12 version configuration to supported Python-based templates, improving setup consistency.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR standardizes editor settings and Python 3.12 declarations across templates. It expands MLOps contribution guidance and links the authoring documentation to the shared MLOps contract.

Changes

Template standards and guidance

Layer / File(s)Summary
Template environment defaults
templates/*/.editorconfig, templates/*/.python-version
Six templates add shared formatting rules. Five templates specify Python 3.12.
MLOps contributor guidance
docs/AUTHORING.md, templates/mlops-sklearn-starter/CONTRIBUTING.md
The documentation links to the MLOps contract. The contribution guide adds setup, checklist, testing, registration, CI, and submission requirements.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly identifies the main change: adding a first-time contributor checklist for the MLOps documentation.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@templates/celery-worker/.editorconfig`:
- Around line 11-12: Update the 2-space glob in
templates/celery-worker/.editorconfig, templates/cli-starter/.editorconfig,
templates/django-api/.editorconfig, templates/fastapi-starter/.editorconfig,
templates/mlops-sklearn-starter/.editorconfig, and
templates/uv-workspace-starter/.editorconfig at lines 11-12 to include md
alongside yml, yaml, json, and toml, preserving the existing indent_size
setting.
In `@templates/mlops-sklearn-starter/CONTRIBUTING.md`:
- Around line 44-50: Update the “Template registration” checklist in
CONTRIBUTING.md to explicitly scope the registration, documentation,
.python-version, and .editorconfig requirements to contributors adding a new
template. Use a “When adding a new template” qualifier or conditional subsection
while preserving the existing required fields and files.
- Around line 6-9: Update the step-registration instructions and checklist in
templates/mlops-sklearn-starter/CONTRIBUTING.md at lines 6-9 and 23-28 to use
one explicit path convention, referencing src/mlops_sklearn/data/,
src/mlops_sklearn/models/, src/mlops_sklearn/pipeline/base.py,
src/mlops_sklearn/pipeline/steps_registry.py, and the corresponding
configuration paths; ensure both sites consistently direct contributors to files
inside the installed package.
- Around line 10-12: Update the testing guidance in CONTRIBUTING.md to require a
generated-project smoke test: scaffold mlops-sklearn-starter with
all-mlops-github-actions using CI=true and --no-interactive, then run uv sync
and uv run pytest from the generated project root.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1db8c523-5d87-411e-a694-4d3cd01d5c5e

📥 Commits

Reviewing files that changed from the base of the PR and between 6986f9b and 56f802c.

📒 Files selected for processing (13)
  • docs/AUTHORING.md
  • templates/celery-worker/.editorconfig
  • templates/celery-worker/.python-version
  • templates/cli-starter/.editorconfig
  • templates/cli-starter/.python-version
  • templates/django-api/.editorconfig
  • templates/django-api/.python-version
  • templates/fastapi-starter/.editorconfig
  • templates/fastapi-starter/.python-version
  • templates/mlops-sklearn-starter/.editorconfig
  • templates/mlops-sklearn-starter/.python-version
  • templates/mlops-sklearn-starter/CONTRIBUTING.md
  • templates/uv-workspace-starter/.editorconfig

Comment on lines +11 to +12
[*.{yml,yaml,json,toml}]
indent_size = 2 No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep Markdown formatting aligned across all template .editorconfig files.

Each file sets root = true, so it does not inherit the repository root Markdown rule. Add md to each 2-space glob.

  • templates/celery-worker/.editorconfig#L11-L12: add md to the glob.
  • templates/cli-starter/.editorconfig#L11-L12: add md to the glob.
  • templates/django-api/.editorconfig#L11-L12: add md to the glob.
  • templates/fastapi-starter/.editorconfig#L11-L12: add md to the glob.
  • templates/mlops-sklearn-starter/.editorconfig#L11-L12: add md to the glob.
  • templates/uv-workspace-starter/.editorconfig#L11-L12: add md to the glob.
📍 Affects 6 files
  • templates/celery-worker/.editorconfig#L11-L12 (this comment)
  • templates/cli-starter/.editorconfig#L11-L12
  • templates/django-api/.editorconfig#L11-L12
  • templates/fastapi-starter/.editorconfig#L11-L12
  • templates/mlops-sklearn-starter/.editorconfig#L11-L12
  • templates/uv-workspace-starter/.editorconfig#L11-L12
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@templates/celery-worker/.editorconfig` around lines 11 - 12, Update the
2-space glob in templates/celery-worker/.editorconfig,
templates/cli-starter/.editorconfig, templates/django-api/.editorconfig,
templates/fastapi-starter/.editorconfig,
templates/mlops-sklearn-starter/.editorconfig, and
templates/uv-workspace-starter/.editorconfig at lines 11-12 to include md
alongside yml, yaml, json, and toml, preserving the existing indent_size
setting.

Comment on lines +6 to +9
2. Add or modify a pipeline step under `data/` or `models/`, implementing
`BaseStep` from `pipeline/base.py`.
2. Register it in `pipeline/steps_registry.py`.
3. Add or update its config section in `config.py` and `configs/default.yaml`.
4. Add tests — see `docs/TESTING_GUIDE.md`.
5. Run `uv run ruff check .`, `uv run mypy .`, `uv run pyright`, and
3. Register it in `pipeline/steps_registry.py`.
4. Add or update its config section in `config.py` and `configs/default.yaml`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Use one explicit path convention for MLOps steps and configuration.

The supplied template stores implementation under src/mlops_sklearn/, but the guide uses package-relative paths without stating that convention. Contributors can create files outside the installed package, so the registry and pipeline runner will not load them.

  • templates/mlops-sklearn-starter/CONTRIBUTING.md#L6-L9: document src/mlops_sklearn/data/, src/mlops_sklearn/models/, src/mlops_sklearn/pipeline/base.py, and src/mlops_sklearn/pipeline/steps_registry.py, or explicitly declare package-relative paths.
  • templates/mlops-sklearn-starter/CONTRIBUTING.md#L23-L28: apply the same convention to the checklist and configuration paths.
📍 Affects 1 file
  • templates/mlops-sklearn-starter/CONTRIBUTING.md#L6-L9 (this comment)
  • templates/mlops-sklearn-starter/CONTRIBUTING.md#L23-L28
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@templates/mlops-sklearn-starter/CONTRIBUTING.md` around lines 6 - 9, Update
the step-registration instructions and checklist in
templates/mlops-sklearn-starter/CONTRIBUTING.md at lines 6-9 and 23-28 to use
one explicit path convention, referencing src/mlops_sklearn/data/,
src/mlops_sklearn/models/, src/mlops_sklearn/pipeline/base.py,
src/mlops_sklearn/pipeline/steps_registry.py, and the corresponding
configuration paths; ensure both sites consistently direct contributors to files
inside the installed package.

Comment on lines +10 to 12
5. Add tests — see `docs/TESTING_GUIDE.md`.
6. Run `uv run ruff check .`, `uv run mypy .`, `uv run pyright`, and
`uv run pytest` before committing.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

export CPA_TEMPLATES_URL="file://$PWD"
CI=true uvx create-awesome-python-app /tmp/mlops-sklearn-check \
--template mlops-sklearn-starter \
--addons all-mlops-github-actions \
--no-interactive
(
cd /tmp/mlops-sklearn-check
uv sync
uv run pytest
)

Repository: Create-Python-App/cpa-templates

Length of output: 353


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== locate markdown files =="
git ls-files '*.md'| rg '(^|/)CONTRIBUTING\.md$|docs/TESTING_GUIDE\.md|README\.md'||trueechoecho"== inspect CONTRIBUTING around listed lines =="if [ -f templates/mlops-sklearn-starter/CONTRIBUTING.md ];then
cat -n templates/mlops-sklearn-starter/CONTRIBUTING.md | sed -n '1,60p'fiechoecho"== search for generate/app/smoke/testing validation patterns in Markdown =="
rg -n "generate|scaffold|CI=true|uv sync|create-awesome-python-app|--no-interactive|mlops-sklearn-starter|pytest" --glob '*.md'.| sed -n '1,200p'

Repository: Create-Python-App/cpa-templates

Length of output: 27231


🏁 Script executed:

#!/bin/bashset -euo pipefail
echo"== inspect mlops template files =="
git ls-files templates/mlops-sklearn-starter | sed -n '1,80p'echoecho"== inspect AGENTS for mlops (if any) =="if [ -f templates/mlops-sklearn-starter/AGENTS.md ];then
cat -n templates/mlops-sklearn-starter/AGENTS.md | sed -n '1,120p'fiechoecho"== check mlops README quality checklist item =="
cat -n templates/mlops-sklearn-starter/README.md | sed -n '1,80p'||trueechoecho"== check docs/TESTING_GUIDE.md if present =="
cat -n templates/mlops-sklearn-starter/docs/TESTING_GUIDE.md | sed -n '1,120p'||trueechoecho"== search exact commands in mlops markdown =="
rg -n "uv sync|uvx|create-awesome-python-app|CI=true|--no-interactive|uv run pytest|mlops-sklearn-starter" templates/mlops-sklearn-starter/*.md templates/mlops-sklearn-starter/**/*.md templates/mlops-sklearn-starter/**/**/*.md ||true

Repository: Create-Python-App/cpa-templates

Length of output: 6339


Add the required generated-project smoke test.

These commands only validate the repository. Add a local scaffold test that generates mlops-sklearn-starter + all-mlops-github-actions with CI=true and --no-interactive, then runs uv sync and uv run pytest from the generated project root.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@templates/mlops-sklearn-starter/CONTRIBUTING.md` around lines 10 - 12, Update
the testing guidance in CONTRIBUTING.md to require a generated-project smoke
test: scaffold mlops-sklearn-starter with all-mlops-github-actions using CI=true
and --no-interactive, then run uv sync and uv run pytest from the generated
project root.

Source: Coding guidelines

Comment on lines +44 to +50
### Template registration

- [ ] New templates are registered in `templates.json` with all required fields:
`name`, `slug`, `description`, `url`, `type`, `category`, `labels`.
- [ ] New templates have a `docs/README.md.append` describing the template's
purpose and unique features.
- [ ] New templates have a `.python-version` and `.editorconfig` file.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Scope template-registration requirements conditionally.

The checklist states that every item must pass, but these bullets apply only when a contributor creates a new template. A normal pipeline-step change cannot satisfy them without adding unrelated registry and documentation files. Add a When adding a new template qualifier or move these items into a conditional subsection.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@templates/mlops-sklearn-starter/CONTRIBUTING.md` around lines 44 - 50, Update
the “Template registration” checklist in CONTRIBUTING.md to explicitly scope the
registration, documentation, .python-version, and .editorconfig requirements to
contributors adding a new template. Use a “When adding a new template” qualifier
or conditional subsection while preserving the existing required fields and
files.

@ulises-jeremias

Copy link
Copy Markdown
Member

Please open a fresh branch from current main with onlytemplates/mlops-sklearn-starter/CONTRIBUTING.md.

This PR conflicts because AUTHORING already has the MLOPS contract link (#164) and the EditorConfig files already landed in #159. The checklist also points at paths that do not exist on this template (data/, models/, pipeline/base.py, …). The generated tree lives under src/mlops_sklearn/. A docs/README.md.append is an extension convention, not a template one.

Once the paths match docs/MLOPS_CONTRACT.md and the extra files are gone, this can close #121.

@ulises-jeremias

Copy link
Copy Markdown
Member

#169, #165, and #162 are now on main, so this branch conflicts.

The remaining unique file is templates/mlops-sklearn-starter/CONTRIBUTING.md (the .editorconfig / .python-version / docs/AUTHORING.md changes already landed).

Please rebase onto current main with only that checklist file and this can merge as soon as CI is green.

Sign up for freeto 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.

2 participants

@emberb170d@ulises-jeremias