Audit issue hygiene and PR closure semantics without mutation #458
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or requestready-for-agentFully specified and safe for an autonomous agentFully specified and safe for an autonomous agent
Description
Parent
What to build
Add one read-only lifecycle auditor that validates live issue metadata and PR closure semantics at the two approved seams. It reports actionable violations through one public CLI and fixture interface but never closes, reopens, relabels, rewrites, or accepts an issue automatically.
Acceptance criteria
- The issue audit detects missing or conflicting category/state labels, literal escaped newlines, invalid tracking/runtime queue placement, missing active ownership, and inconsistent native parent/blocker relationships.
- The PR audit accepts explicit
Refs, final default-branchCloses, andNone, while rejecting negated closing phrases, runtime/tracking closure, ambiguous relationships, external repository-qualified closing references, and closing keywords on non-default-base stacks. - PR bodies, titles, and the complete commit list are inspected because the repository squash-merge subject can preserve a closing keyword from the PR title.
- Fixture-driven focused checks cover each valid and invalid counterexample through the public auditor interface.
- The public CLI supports fixture input, one-PR audit, and full live-repository audit without a workflow-specific code path.
- The live dry run reports current violations and reports the automatic-close setting as
unknown/unavailable via documented APIrather than inferring it. - Ruby syntax, shell syntax, shellcheck, focused fixtures, live PR audit, full read-only live audit, and
git diff --checkare recorded.
Blocked by
#456 defines the validated lifecycle contract.
Out of scope
- The GitHub Actions entrypoint and stable check; split to Run the lifecycle auditor as a read-only GitHub check #467.
- Required-check enforcement; that remains Enable the Issue Lifecycle required check after a green observation window #460.
- Historical metadata mutation; that remains Reconcile existing GitHub issue metadata against the lifecycle contract #459.
Split note
The original combined auditor/workflow candidate exceeded the repository review boundary and had a safe rollback split. #458 now owns only the auditor and its focused fixtures; #467 owns the workflow entrypoint.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestready-for-agentFully specified and safe for an autonomous agentFully specified and safe for an autonomous agent
Activity
ci(governance): harden lifecycle auditor contracts (#458)