Release
v3.3.1
signpostA hotfix from first customer feedback: failure issues link the CI job that raised them and drop the boilerplate footer, and runs with couplings now leave a per-registry drift audit for diagnosing out-of-sync mirrors.
Highlights
- 01
The issue names its run
The context table links the CI job that raised the failure (from CI_JOB_URL), so the full log, the artifacts and the retry button are one click from the issue — which matters for an issue that is rewritten in place across runs. Local runs, which have no job, omit the row.
- 02
Diagnostics, not boilerplate
The closing paragraph restating the feature's own lifecycle contract is gone from every issue. That contract is documentation and the docs carry it; the issue body now ends with the logs and the scan report, and the regression asserts the footer's absence so it cannot quietly return.
Full notes
Added
- Registry drift audit: runs with couplings write <out>/registry-audit/<groupId>__<artifactId>.json per coupling dependency — per-registry version listings with foundIn/missingFrom and an inSync/behind verdict, registries named as in config.yml. Always on; unreachable registries are recorded with their error.
- Regression evidence: mock GitLab state is persisted per case (mock-state.json); five stdout-only cases gained artifact-backed assertions; the Go-test wrapper jobs preserve the Maven projects they build for artifact review.
Fixed
- Failure issues carry a 'CI job' row linking the raising job when CI_JOB_URL is set; local runs omit the row.
- Failure issues no longer append the lifecycle-contract footer; reg-092 now asserts its absence.