CI/CD verification steps must produce truthful, reproducible, human-visible evidence under hard environment constraints (time, filesystem, available tools, git history). Concretely:
1) Keep evidence visible across stages
status: "dropped", ensure it still appears in the human-facing report stream (not just an internal fixes list). Align .fixes/.reportOnly semantics so “dropped because verification failed” is still auditable.2) Make verification rerunnable (idempotent cleanup)
Example (safe worktree lifecycle):
# use a directory name that matches cleanup patterns (or remove explicitly)
git worktree add tmp/base-verify-tree HEAD^1
# ... run A/B ...
# always remove what you registered
git worktree remove --force tmp/base-verify-tree
3) Don’t promise evidence you can’t obtain
4) Run only gates your container can actually run; avoid mutating the PR tree
node scripts/lint.js --setup
# then only non-mutating checks (examples)
node scripts/lint.js --actionlint
# never call the mutating no-arg form that rewrites the PR tree
5) Validate controls don’t accidentally execute head code
6) Follow-up reports must snapshot the newest substantive evidence
/verify rounds, snapshot the latest substantive previous report (not transient “running/weak” marker comments) so prior unresolved findings aren’t erased.Applying these rules prevents CI/CD from silently hiding failures, failing reruns due to stale artifacts, overstating verification certainty, or producing non-comparable A/B results—raising reliability of automated gates and maintainer trust in the evidence.