Contributing to LabFrogο
Use this guide for code, docs, benchmark, and operational changes.
Before You Startο
Read the documentation hub at labfrog.readthedocs.io.
Search the existing issue tracker before opening a new issue.
Use the
developbranch as the base for new work.
Documentation Policyο
Published docs are built from the
doc/folder.Keep
README.mdas a short intro and pointer page.Put substantive documentation updates in
doc/pages instead of expanding README.
Recommended Workflowο
Pick or open an issue.
Create a branch from
develop.Make the change.
Run the checks that match the scope of your change.
Open a merge request targeting
develop, link the issue, and list the checks you ran.
Example branch setup:
git checkout develop
git checkout -b feature/your-feature-name
Validationο
Testing is the canonical command and test-ownership reference. Choose the smallest useful focused test first, then run the matching gate:
uv run poe prepush-fastfor routine code or documentation changes.uv run poe prepush-fullfor browser-facing or documentation-build changes.uv run poe build_docsplus visual review when screenshots should change.git diff --checkbefore every handoff.
Use Benchmarks and Runtime Performance for
performance runners and stored-result interpretation. pyproject.toml remains
the source of truth for Poe task definitions and dependency groups.
Test Coverage Mapο
Use this generated map as a quick sense of which workflows are well covered before changing a
shared route or template. Percentages come from the latest poe test-fast pytest-cov JSON run.
Overall labfrog line coverage from that run: 80.00%.
Area |
Coverage |
Main tests |
Watch next |
|---|---|---|---|
Startup, auth, and request state |
Good |
|
Environment-specific branches and login provider edge cases |
Add Entry / Edit Entry |
Good |
|
Less common set-mode and shot-number backfeed branches |
Search Records |
Good |
|
Drag/resize-heavy browser behavior around plots |
Select Fields / Organize Sections |
Strong |
|
Campaign-mapped layout resolution across paired shot/set modes |
Parameters, diagnostics, and selectables |
Good |
|
Diagnostic preset detail round-trips and option de-duplication |
Init, reset, and operator tooling |
Good |
|
Real-service integration branches |
Coverage Commandsο
uv run poe test-fastis the default local regression pass for routine work.uv run pytest tests/test_search_form.pyis a good focused-run pattern. Swap in the module closest to the change.uv run pytest --cov-report=html --cov-report=term-missingcreates the browsable line report and still prints missing lines in the terminal.uv run poe test-fastrefreshes the generated coverage map when the pytest-cov JSON data changes.
Troubleshooting First Responseο
When a bug report says βnot workingβ, use this sequence before deep refactors:
Reproduce on canonical routes (
/add_entry,/edit_entry,/diagnostic_options).Confirm whether failure is server-side or browser-only.
Run the smallest matching test module first.
If Add and Edit fail together, start in
labfrog/request_state.pyandlabfrog/entry_route_common.py.Keep compatibility aliases only as bridges; fix canonical behavior first.
Tooling Referenceο
pyproject.toml is the source of truth for Poe tasks, dependency groups, pytest
coverage settings, and shared contributor commands. Prefer uv run poe ...
commands from this file when they exist.
Use these rules of thumb:
Run
uv run poe doctoronce for a new checkout or after changing local config. It checks core tools, local config files, optional browser tooling, and a test-safe app import.Run
uv run poe prepush-fastfor routine code or docs changes.Run
uv run poe prepush-fullfor browser-facing changes, docs-build changes, or broader workflow edits.Use
uv run poe build-docs-htmlfor a side-effect-light docs build. Useuv run poe build_docsonly when screenshots should be regenerated.Hermes mainly matters for release automation.
pyproject.toml,CITATION.cff,codemeta.json, anddoc/conf.pyeach carry the release version. Bump them together in the release preparation commit; a release where they disagree ships the wrong metadata.
Repository Control Filesο
These files keep collaboration predictable across Windows, Linux, editors, and CI.
File or path |
What it does |
Why it matters |
|---|---|---|
|
Tells Git how to treat files and line endings. |
Prevents accidental CRLF/LF churn and binary-file corruption. |
|
Gives editors shared whitespace and encoding defaults. |
Keeps saves from different IDEs consistent. |
|
Maps paths to likely reviewers in GitLab. |
Helps merge requests reach the right people. |
|
Lists large cleanup commits that |
Keeps line history useful after formatting or rename passes. |
|
Provides the default merge request checklist. |
Makes reviews more consistent. |
|
Lists local/generated files that should stay out of Git. |
Keeps caches, temp files, and machine-specific noise out of commits. |
|
Defines dependencies, Poe tasks, pytest options, and contributor workflows. |
It is the main entrypoint for shared commands. |
If one of these files changes, treat it as a repo-policy change rather than an app-feature change.
Review And Ownershipο
CODEOWNERSis used so GitLab can suggest reviewers for docs, app code, tests, and scripts.The merge request template keeps issue links and verification notes consistent.
Keep merge requests small enough to review.
Mention the checks you actually ran in the merge request description.
The best merge requests:
explain the problem in one or two sentences
link the related issue
mention the checks you ran
include docs updates when user-visible behavior changed
Help And Maintainersο
Name |
Role |
Handle |
|---|---|---|
Kristin Tippey |
Lead developer and technical implementation |
|
Hans-Peter Schlenvoigt |
Project coordination and requirements |
|
If you are unsure about workflow, environment setup, or scope, ask on the related issue first.
Conductο
Be constructive, direct, and respectful. If a collaboration problem needs escalation, contact a maintainer.