Release Prep FAQ
What is release prep?
Release prep runs a preflight checklist across your project before you publish. It coordinates specialized agents to check code quality, test coverage, security, and documentation, then produces a ReleaseReadinessReport with a go/no-go verdict.
When should I use it?
Use release prep before tagging a release, bumping a version, or uploading to PyPI. It's also useful after merging a large feature branch when you want to confirm the codebase is in a shippable state.
What checks does it run?
Four specialized agents run in parallel:
CodeQualityAgent— runs ruff, checks type hints and complexity.TestCoverageAgent— runspytest --covand parses the coverage report.SecurityAuditorAgent— scans for vulnerabilities, secret leaks, and unsafe patterns.DocumentationAgent— checks docstring coverage, README currency, and CHANGELOG presence.
Each agent returns a ReleaseAgentResult with a score, confidence, and findings dict.
What does the final report look like?
assess_readiness() returns a ReleaseReadinessReport. The key fields are:
approved—Trueif every criticalQualityGatepassed.blockers— list of issues that must be fixed before release.warnings— non-blocking advisories.quality_gates— list ofQualityGateresults, each withname,threshold,actual, andpassed.
Call format_console_output() to print a human-readable summary, or to_dict() to serialize the report.
What's the fastest way to run it?
Instantiate ReleasePrepTeam and call assess_readiness():
from release import ReleasePrepTeam
team = ReleasePrepTeam()
report = team.assess_readiness(codebase_path=".")
print(report.format_console_output())
If you need workflow integration, use ReleasePrepTeamWorkflow.execute() instead, which accepts a path and optional context dict.
Can I customize the quality gate thresholds?
Yes. Pass a quality_gates dict to ReleasePrepTeam or ReleasePrepTeamWorkflow:
team = ReleasePrepTeam(quality_gates={"coverage": 0.90, "security": 0.95})
Each key is a gate name and the value is the minimum passing threshold. Gates with critical=True block the approved verdict if they fail.
What happens when a check needs more analysis?
ReleaseAgent uses progressive tier escalation — it starts at a cheap model tier and escalates to more capable tiers if confidence is low. The ReleaseAgentResult.escalated field tells you whether escalation occurred, and tier_used records which tier produced the final result.
How do I check what the run cost?
Call get_total_cost() on your ReleasePrepTeam instance after assess_readiness() returns. The same value is also available as ReleaseReadinessReport.total_cost.
How do I debug a failed run?
Run pytest -k "release-prep" -v first. If the tests pass but your results look wrong, inspect the findings dict on each ReleaseAgentResult in report.agent_results — each agent records its raw output there. You can also check execution_time_ms and success per agent to identify which one failed.
Where are the source files?
src/attune/agents/release/— individual agents (base_agent,coverage_agent,documentation_agent,quality_agent,security_agent)src/attune/workflows/release_prep.py—ReleasePreparationWorkflow
Tags: release, publishing, quality
Unresolved references
Auto-generated by attune-author fact-check. Review and either fix the source code, fix this doc, or add an override.
| Location | Severity | Issue |
|---|---|---|
| Line 47 (code fence) | error | from release import … — module not importable |