MADSci Release Artifact Audit
Code changes are only half the story. Documentation, examples, templates, and the CHANGELOG frequently fall out of sync with the code they describe. This skill provides a structured audit checklist to catch these gaps before they reach users.
When to Use
- Before opening or updating a PR
- As the final phase of an implementation plan
- After completing a feature branch
- Before any merge to
mainorunstable - When the user asks to "audit", "review artifacts", or "check docs"
Audit Checklist
Work through each section. For each item, either confirm it's correct or fix it. Report findings to the user as you go.
1. CHANGELOG (docs/CHANGELOG.md)
Goal: Every user-facing change has a corresponding CHANGELOG entry in the Keep a Changelog 1.1.0 format.
Use the keepachangelog skill for the format rules, category definitions (Added/Changed/Deprecated/Removed/Fixed/Security), MADSci conventions (**BREAKING**: prefix, **backticked-symbol**: lead-ins, sub-headings), and the release-cut workflow. This audit covers only the cross-checking part:
- Identify the version being prepared (check
pyproject.tomlat repo root for the current version). - Get the git log since the last release tag:
git log --oneline <last-tag>..HEAD. - For each merged PR, verify it has at least one entry under
[Unreleased](or the version section being cut) in the correct category. Apply thekeepachangelogrules when adding or fixing entries. - Ensure the header uses the correct version and ISO 8601 date format:
## [X.Y.Z] - YYYY-MM-DD. - Confirm a fresh empty
## [Unreleased]section exists above the latest release. - Strip any interstitial development noise (merge commits, pre-commit fixes, "merging with unstable", lint-only churn).
2. Documentation and Guides (docs/)
Goal: Code examples in docs match the current API surface.
- Search docs for import statements and verify they resolve:
grep -r "from madsci\." docs/ --include="*.md" - Check for references to deprecated/removed names. Current known deprecated patterns:
ActionHandler(use@actiondecorator)self.node_definition(useself.node_info)NodeDefinition(useNodeConfig)SquidServer/SquidSettings(useLabManager/LabManagerSettings)load_definition()/load_or_create_definition()(removed)create_minio_client(usecreate_object_storage_client)mongo_db_urlwithout backward-compat context (usedocument_db_url)PyMongoHandler/InMemoryMongoHandler(usePyDocumentStorageHandler/InMemoryDocumentStorageHandler)
- Check infrastructure references are current:
- MongoDB references should say FerretDB (unless discussing migration)
- Redis references should say Valkey (unless discussing migration)
- MinIO references should say SeaweedFS (unless discussing migration)
- Ports: FerretDB=27017, PostgreSQL=5432+5434, Valkey=6379, SeaweedFS=8333/9333
- Verify cross-references between docs (links to other guides, README paths) still resolve
3. Example Lab (examples/example_lab/)
Goal: The example lab README and configuration match the actual compose/settings files.
- Compare
README.mdinfrastructure section againstcompose.infra.yaml:- Service names match
- Ports match
- Descriptions are accurate
- Verify
settings.yamland.envuse current field names and terminology - Check that example modules use current patterns (
@action,self.node_info,self.event_client) - Verify workflow YAML files reference valid node names and actions
- Check troubleshooting commands reference correct service names
4. Example Notebooks (examples/notebooks/)
Goal: Notebooks demonstrate current APIs and patterns.
- Check import statements use current module paths
- Verify class names and method signatures match current code:
ExperimentNotebook,ExperimentScript,ExperimentTUI,ExperimentNodeRestNode,RestNodeConfig,@actionMadsciClientMixinclient properties (event_client,workcell_client, etc.)
- Check that database/infrastructure references use FOSS terminology
- Verify backup/migration notebook uses current tool names (
DocumentDBBackupTool, etc.)
5. Bundled Templates (src/madsci_common/madsci/common/bundled_templates/)
Goal: Generated code from templates is correct and uses current APIs.
-
Run the template validation tests (these catch most issues automatically):
pytest src/madsci_common/tests/test_templates/test_template_engine.py -x -qThe
TestGeneratedCodeQualitytests verify:- All
from madsci.*imports resolve to real names - Generated YAML/TOML/JSON files parse correctly
- No deprecated patterns appear in generated Python code
- All
-
If tests pass, templates are likely correct. If adding new deprecations, update the
DEPRECATED_PYTHON_PATTERNSlist in the test file. -
For manual review, spot-check:
- Module templates use
@action(notActionHandler) - Module templates reference
self.node_info(notself.node_definition) - Module templates use
self.event_client.info()(notself.logger.log()) - Lab templates use
LabManager/LabManagerSettings(notSquidServer/SquidSettings) - Types templates import
RestNodeConfigfrommadsci.common.types.node_types
- Module templates use
6. Agent Skills (.agents/skills/, bundled_templates/_skills/)
Goal: Skills reference current APIs and patterns.
- Check that code examples in skill files use current import paths and class names
- Verify architecture descriptions match current codebase structure
- Ensure any file paths mentioned in skills still exist
7. Main README (README.md)
Goal: Top-level README is accurate for the release.
- Verify version badge and CI status links
- Check installation instructions are current
- Verify quick start commands work
- Ensure component documentation links resolve
- Check the CLI command table matches the current command set
What NOT to Audit
- Auto-generated files:
docs/Configuration.md,docs/api-specs/, REST API docs (these are regenerated) - Git history: Don't audit commit messages or branch structure
- Test code: Tests are validated by running them, not by reading them
- Code internals: This audit covers artifacts users interact with, not implementation details
Adding New Deprecations
When you deprecate or remove an API, add the old name to two places:
DEPRECATED_PYTHON_PATTERNSinsrc/madsci_common/tests/test_templates/test_template_engine.py— catches it in templates automatically- The list in section 2 of this skill — reminds auditors to check docs/guides
Reporting
After completing the audit, provide a summary:
- Items checked and confirmed correct
- Issues found and fixed
- Issues found that need user input
- Any items that could not be verified (e.g., Docker-dependent checks)