* feat: add pre-push git hook with delta lint mode
Add pre-push hook and CI quality gate scripts:
- .githooks/pre-push: runs quality gate before push
- scripts/ci/quality_gate.sh: baseline fmt + clippy correctness + tests
- scripts/ci/delta_lint.sh: clippy warnings filtered to changed lines only
- Updated dev-setup.sh to install pre-push hook
Supports environment-gated modes:
- IRONCLAW_STRICT_LINT=1: deny all clippy warnings
- IRONCLAW_STRICT_DELTA_LINT=1: deny warnings only on changed lines
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix: use git rev-parse for SCRIPT_DIR, add python3 check
- Fix SCRIPT_DIR resolution in pre-push hook to work correctly
with symlinks by using git rev-parse --show-toplevel
- Add python3 availability check in delta_lint.sh
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix: delta lint stderr handling, --locked flag, path normalization
- Stop suppressing clippy stderr; capture it and show compilation
errors if clippy produces no JSON output
- Add --locked flag to clippy for lockfile consistency
- Use repo root (via git rev-parse) for path normalization instead
of os.getcwd() which may differ from repo root
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix: dynamically detect upstream base branch in delta_lint.sh
Instead of hard-coding `origin/main`, derive the base ref by checking
`refs/remotes/origin/HEAD`, then falling back to `origin/main` and
`origin/master`. If none can be resolved, skip delta lint gracefully
with a warning and exit 0.
Addresses PR #833 review feedback.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* chore: re-trigger CI after adding skip-regression-check label
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix: address PR #833 review feedback for delta lint
- Pass remote name ($1) from pre-push hook to delta_lint.sh
- Accept optional remote name arg, fall back to dynamic detection
- Treat error-level diagnostics as always blocking
- Check span overlap [line_start, line_end] vs changed ranges
- Handle +++ /dev/null (file deletions) in parse_diff
- Catch git merge-base failure with graceful skip
- Add CLIPPY_STDERR to EXIT trap cleanup
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix: drop -D warnings from delta lint, scope pre-push tests to --lib
1. Remove `-D warnings` from the clippy invocation in delta_lint.sh.
With -D warnings, all warnings are promoted to error level in JSON
output, which bypasses the delta filter entirely (errors are always
blocking). The Python filter already handles the blocking decision
for warnings based on changed-line overlap.
2. Scope pre-push tests to `cargo test --lib` (unit tests only) instead
of the full test suite. Full integration tests can take minutes and
will train developers to use --no-verify. The full suite runs in CI.
Skip tests entirely with IRONCLAW_PREPUSH_TEST=0.
Addresses zmanian's review feedback on PR #833.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>