Skip to content

feat: Unified PR review engine (ckb review)#137

Open
SimplyLiz wants to merge 13 commits intodevelopfrom
feature/review-engine
Open

feat: Unified PR review engine (ckb review)#137
SimplyLiz wants to merge 13 commits intodevelopfrom
feature/review-engine

Conversation

@SimplyLiz
Copy link
Owner

Summary

  • Adds ckb review — a comprehensive, structural PR review engine with 13 parallel checks, 7 output formats, and finding baseline management
  • Engine-centric architecture: one Engine.ReviewPR() method automatically exposed via CLI, HTTP API, and MCP
  • Designed for both open-source and regulated industry (IEC 61508, ISO 26262) use cases

What's included

Checks (13, run in parallel)

breaking · secrets · tests · complexity · coupling · hotspots · risk · critical · generated · health · traceability · independence · split

Output Formats (7)

human · json · markdown · github-actions · sarif · codeclimate · compliance

Features by batch

  • Batch 1+2 — MVP: Core engine, parallel check orchestration, CLI/MCP/HTTP interfaces
  • Batch 3 — Large PR Intelligence: PR split suggestion (BFS connected components), change classification (8 categories), review effort estimation, per-cluster reviewer assignment
  • Batch 4 — Code Health & Baseline: 8-factor weighted health score (A-F grading), finding baselines with SHA256 fingerprinting, ckb review baseline save/list/diff
  • Batch 5 — Industrial/Compliance: Traceability check (commit-to-ticket), reviewer independence enforcement, compliance evidence export
  • Batch 6 — CI/CD: SARIF v2.1.0 (GitHub Code Scanning), CodeClimate JSON (GitLab), GitHub Action with PR comments, GitLab CI template
  • Batch 7 — Tests: Golden-file tests for all formats, 82 tests total

CI

  • New review-tests job in CI pipeline: engine tests, format tests, golden-file staleness check

New files (26)

internal/query/review.go                    # Core engine + orchestration
internal/query/review_health.go             # 8-factor health scoring
internal/query/review_baseline.go           # Finding baselines
internal/query/review_traceability.go       # Commit-to-ticket linkage
internal/query/review_independence.go       # Reviewer independence
internal/query/review_split.go              # PR split suggestion
internal/query/review_classify.go           # Change classification
internal/query/review_effort.go             # Review effort estimation
internal/query/review_reviewers.go          # Per-cluster reviewer assignment
internal/query/review_complexity.go         # Complexity delta
internal/query/review_coupling.go           # Coupling gap detection
cmd/ckb/review.go                           # CLI command + human/markdown/GHA formatters
cmd/ckb/review_baseline.go                  # CLI baseline subcommands
cmd/ckb/format_review_sarif.go              # SARIF output
cmd/ckb/format_review_codeclimate.go        # CodeClimate output
cmd/ckb/format_review_compliance.go         # Compliance evidence export
action/ckb-review/action.yml                # GitHub Action
ci/gitlab-ckb-review.yml                    # GitLab CI template
testdata/review/*.{txt,md,json}             # 6 golden files

Test plan

  • go test ./internal/query/... -run TestReview — 15 integration tests with real git repos
  • go test ./internal/query/... -run "TestClassify|TestEstimate|TestSuggest|TestBFS" — 16 Batch 3 tests
  • go test ./internal/query/... -run "TestHealth|TestBaseline|TestFingerprint|TestSave|TestLoad|TestCompare" — 16 Batch 4 tests
  • go test ./internal/query/... -run "TestCheckTraceability|TestCheckIndependence" — 10 Batch 5 tests
  • go test ./cmd/ckb/... -run "TestFormatSARIF|TestFormatCodeClimate|TestFormatGitHubActions|TestFormatCompliance" — 19 format tests
  • go test ./cmd/ckb/... -run TestGolden — 6 golden-file tests
  • go build ./cmd/ckb — binary builds cleanly
  • CI pipeline passes (lint, test, review-tests, security, build)

🤖 Generated with Claude Code

SimplyLiz and others added 4 commits March 18, 2026 21:18
Implements comprehensive PR review with parallel quality gates:
- Engine core (review.go): orchestrates breaking, secrets, tests,
  complexity, coupling, hotspots, risk, and critical-path checks
- CLI command (cmd/ckb/review.go): human, markdown, github-actions formats
- MCP tool (reviewPR): full InputSchema, added to PresetReview
- HTTP API (POST /review/pr): GET/POST with policy overrides
- Config section (ReviewConfig): repo-level policy defaults
- Complexity delta (review_complexity.go): tree-sitter before/after comparison
- Coupling gaps (review_coupling.go): co-change analysis for missing files
- 15 tests covering integration (real git repos) and unit tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PR split suggestion via connected component analysis on module
affinity + coupling graph. Change classification (new/refactor/
moved/churn/config/test/generated) with review priority. Review
effort estimation based on LOC, file switches, module context
switches, and critical file overhead. Per-cluster reviewer
assignment from ownership data.

New files:
- review_split.go: BFS-based clustering, coupling edge enrichment
- review_classify.go: 8 categories with confidence + priority
- review_effort.go: time estimation with complexity tiers
- review_reviewers.go: per-cluster reviewer scoping

Wired into ReviewPR response (SplitSuggestion, ChangeBreakdown,
ReviewEffort, ClusterReviewers). CLI formatters updated for human
and markdown output. 16 new tests, 31 total.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… 4-7

Batch 4 — Code Health & Baseline:
- 8-factor weighted health score (cyclomatic, cognitive, LOC, churn, coupling, bus factor, age, coverage)
- Per-file health deltas with A-F grading, wired as parallel check
- Finding baselines: save/load/list/compare with SHA256 fingerprinting
- CLI: ckb review baseline save/list/diff

Batch 5 — Industrial/Compliance:
- Traceability check: configurable regex patterns for ticket IDs in commits/branches
- Reviewer independence enforcement: author exclusion, critical-path escalation
- Compliance evidence export format (--format=compliance)
- Git adapter: GetCommitRange() for commit-range queries

Batch 6 — CI/CD & Output Formats:
- SARIF v2.1.0 output with partialFingerprints, fixes, rules
- CodeClimate JSON output for GitLab Code Quality
- GitHub Action (action/ckb-review/action.yml) with PR comments and SARIF upload
- GitLab CI template (ci/gitlab-ckb-review.yml) with code quality job

Batch 7 — Tests & Golden Files:
- 6 golden-file tests for all output formats (human, markdown, sarif, codeclimate, github-actions, json)
- 19 format unit tests (SARIF, CodeClimate, GitHub Actions, human, markdown, compliance)
- 16 health/baseline tests, 10 traceability/independence tests
- Fixed map iteration order in formatters for deterministic output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds dedicated review-tests job that runs:
- Review engine unit/integration tests (82 tests across batches 1-7)
- Format output tests (SARIF, CodeClimate, GitHub Actions, compliance)
- Golden-file tests with staleness check for testdata/review/

Build job now gates on review-tests passing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
// getBaseComplexity gets complexity of a file at a given git ref.
func getBaseComplexity(ctx context.Context, analyzer *complexity.Analyzer, repoRoot, file, ref string) *complexity.FileComplexity {
// Use git show to get the base version content
cmd := exec.CommandContext(ctx, "git", "show", ref+":"+file)

Check failure

Code scanning / gosec

Subprocess launched with variable Error

Subprocess launched with a potential tainted input or cmd arguments
@github-actions
Copy link

🔐 Security Audit Results

⚠️ Security gate passed with warnings - 33 issue(s) found (review recommended)

Category Findings
🔑 Secrets ✅ 0
🛡️ SAST ⚠️ 17
📦 Dependencies ⚠️ 16
📜 Licenses ⚠️ 69 non-permissive

🛡️ SAST Analysis

Found 17 issue(s) across 1 scanner(s)

Details

Gosec (17 findings)

  • /home/runner/work/CodeMCP/CodeMCP/internal/webhooks/manager.go:72 - G118: context cancellation function returned by WithCancel/WithTim...
  • /home/runner/work/CodeMCP/CodeMCP/internal/scheduler/scheduler.go:59 - G118: context cancellation function returned by WithCancel/WithTim...
  • /home/runner/work/CodeMCP/CodeMCP/internal/jobs/runner.go:304 - G118: context cancellation function returned by WithCancel/WithTim...
  • /home/runner/work/CodeMCP/CodeMCP/internal/tier/runner.go:45 - G204: Subprocess launched with variable...
  • /home/runner/work/CodeMCP/CodeMCP/internal/ownership/blame.go:81 - G204: Subprocess launched with variable...
  • ... and 12 more

📦 Dependency Vulnerabilities

Found 16 vulnerability(ies) across 2 scanner(s)

Details

Trivy (10 findings)

  • CVE-2026-1526 (HIGH): undici - undici: undici: Denial of Service via unbounded me...
  • CVE-2026-2229 (HIGH): undici - undici: Undici: Denial of Service via invalid WebS...
  • CVE-2026-1525 (MEDIUM): undici - undici: Undici: HTTP Request Smuggling and Denial ...
  • CVE-2026-1527 (MEDIUM): undici - undici: Undici: HTTP header injection and request ...
  • CVE-2026-22036 (MEDIUM): undici - undici: Undici: Denial of Service via excessive de...
  • ... and 5 more

OSV-Scanner (6 findings)

  • github.com/docker/cli: 1 vulnerabilities
  • github.com/docker/docker: 2 vulnerabilities
  • github.com/go-chi/chi/v5: 1 vulnerabilities
  • github.com/rs/cors: 2 vulnerabilities
  • go.opentelemetry.io/otel/sdk: 2 vulnerabilities
  • ... and 1 more

📜 License Issues

Found 69 non-permissive license(s)

Details
  • github.com/BurntSushi/toml: MIT (notice)
  • github.com/google/uuid: BSD-3-Clause (notice)
  • github.com/klauspost/compress: Apache-2.0 (notice)
  • github.com/klauspost/compress: BSD-3-Clause (notice)
  • github.com/klauspost/compress: MIT (notice)
  • github.com/pelletier/go-toml/v2: MIT (notice)
  • github.com/smacker/go-tree-sitter: MIT (notice)
  • github.com/sourcegraph/go-diff: MIT (notice)
  • github.com/sourcegraph/scip: Apache-2.0 (notice)
  • github.com/spf13/cobra: Apache-2.0 (notice)
  • ... and 59 more

Generated by CKB Security Audit | View Details | Security Tab

@github-actions
Copy link

github-actions bot commented Mar 18, 2026

🟡 Change Impact Analysis

Metric Value
Risk Level MEDIUM 🟡
Files Changed 53
Symbols Changed 747
Directly Affected 1
Transitively Affected 260

Blast Radius: 0 modules, 1 files, 261 unique callers

📝 Changed Symbols (747)
Symbol File Type Confidence
BaselineFinding internal/query/review_baseline.go added 100%
BaselineFinding#File internal/query/review_baseline.go added 100%
BaselineFinding#Fingerprint internal/query/review_baseline.go added 100%
BaselineFinding#FirstSeen internal/query/review_baseline.go added 100%
BaselineFinding#Message internal/query/review_baseline.go added 100%
BaselineFinding#RuleID internal/query/review_baseline.go added 100%
BaselineFinding#Severity internal/query/review_baseline.go added 100%
BaselineInfo internal/query/review_baseline.go added 100%
BaselineInfo#CreatedAt cmd/ckb/review_baseline.go added 100%
BaselineInfo#FindingCount cmd/ckb/review_baseline.go added 100%
BaselineInfo#Path internal/query/review_baseline.go added 100%
BaselineInfo#Tag cmd/ckb/review_baseline.go added 100%
CategoryChurn internal/query/review_classify.go added 100%
CategoryModified internal/query/review_classify.go added 100%
CategoryRefactor internal/query/review_classify.go added 100%
+732 more
🎯 Affected Downstream (20)
Symbol Module Distance Kind
unknown `` 1 type-dependency
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runBaselineDiff(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runBaselineList(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runBaselineSave(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runReview(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/api/Server#handleReviewPR(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/mcp/MCPServer#toolReviewPR(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/Engine#ReviewPR(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/Engine#classifyChanges(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestCompareWithBaseline_AllResolved(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestCompareWithBaseline_EmptyBaseline(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestEstimateReviewEffort_Empty(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestEstimateReviewEffort_LargePR(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestEstimateReviewEffort_SmallPR(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestEstimateReviewEffort_WithClassification(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestListBaselines_Empty(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestListBaselines_Sorted(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestSaveAndLoadBaseline(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestSaveBaseline_AutoTag(). `` 2 transitive-caller
scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/query/TestSaveBaseline_LatestCopy(). `` 2 transitive-caller

Recommendations

  • ⚠️ test: Significant transitive impact (260 symbols). Run comprehensive test suite.
    • Action: Run full test suite before merging

Generated by CKB

@codecov
Copy link

codecov bot commented Mar 18, 2026

Codecov Report

❌ Patch coverage is 68.09094% with 814 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/query/review.go 71.3% 144 Missing and 38 partials ⚠️
internal/query/review_health.go 61.2% 84 Missing and 19 partials ⚠️
cmd/ckb/review.go 70.1% 100 Missing and 2 partials ⚠️
internal/api/handlers_review.go 0.0% 75 Missing ⚠️
cmd/ckb/review_baseline.go 13.4% 71 Missing ⚠️
internal/query/review_complexity.go 34.1% 51 Missing and 5 partials ⚠️
internal/mcp/tool_impls_review.go 0.0% 42 Missing ⚠️
internal/query/review_classify.go 64.3% 39 Missing and 2 partials ⚠️
cmd/ckb/format_review_compliance.go 77.7% 24 Missing and 2 partials ⚠️
internal/query/review_baseline.go 80.0% 14 Missing and 10 partials ⚠️
... and 9 more
Additional details and impacted files
@@            Coverage Diff            @@
##           develop    #137     +/-   ##
=========================================
+ Coverage     45.6%   47.4%   +1.8%     
=========================================
  Files          367     385     +18     
  Lines        61934   64484   +2550     
=========================================
+ Hits         28274   30608   +2334     
- Misses       31744   31794     +50     
- Partials      1916    2082    +166     
Flag Coverage Δ
unit 47.4% <68.0%> (+1.8%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

📢 Thoughts on this report? Let us know!

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link

github-actions bot commented Mar 18, 2026

CKB Analysis

Risk Files +9716 -152 Modules

🎯 747 changed → 260 affected · 🔥 49 hotspots · 📊 12 complex · 💣 8 blast · 📚 148 stale

Risk factors: Large PR with 60 files • High churn: 9868 lines changed • Touches 49 hotspot(s)

👥 Suggested: @lisa.welsch1985@gmail.com (100%), @talantyyr@gmail.com (38%), @lisa@tastehub.io (2%)

Metric Value
Impact Analysis 747 symbols → 260 affected 🟡
Doc Coverage 8.783783783783784% ⚠️
Complexity 12 violations ⚠️
Coupling 0 gaps
Blast Radius 0 modules, 1 files
Index indexed (6s) 💾
🎯 Change Impact Analysis · 🟡 MEDIUM · 747 changed → 20 affected
Metric Value
Symbols Changed 747
Directly Affected 1
Transitively Affected 260
Modules in Blast Radius 0
Files in Blast Radius 1

Symbols changed in this PR:

Downstream symbols affected:
Direct callers (1):

  • unknown
    Transitive callers (19):
  • scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runBaselineDiff(). (depth 2)
  • scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runBaselineList(). (depth 2)
  • scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runBaselineSave(). (depth 2)
  • scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/cmd/ckb/runReview(). (depth 2)
  • scip-go gomod github.com/SimplyLiz/CodeMCP 97151145a0b2 github.com/SimplyLiz/CodeMCP/internal/api/Server#handleReviewPR(). (depth 2)
  • … and 14 more transitive callers

Recommendations:

  • ⚠️ Significant transitive impact (260 symbols). Run comprehensive test suite.
    • Action: Run full test suite before merging
💣 Blast radius · 0 symbols · 8 tests · 0 consumers

Tests that may break:

  • cmd/ckb/format_review_golden_test.go
  • cmd/ckb/format_review_test.go
  • internal/mcp/presets_test.go
  • internal/mcp/token_budget_test.go
  • internal/query/review_batch3_test.go
  • … and 3 more
🔥 Hotspots · 49 volatile files
File Churn Score
.github/workflows/build-matrix.yml 3.56
.github/workflows/ci.yml 10.41
.github/workflows/ckb.yml 4.80
.github/workflows/nfr.yml 3.97
.github/workflows/release.yml 3.74
.github/workflows/security-dependencies.yml 4.11
.github/workflows/security-gate.yml 5.02
.github/workflows/security-sast-common.yml 4.44
📦 Modules · 4 at risk
Module Files
🔴 internal/query 16
🔴 .github/workflows 14
🟡 testdata/review 7
🟡 cmd/ckb 7
📊 Complexity · 12 violations
File Cyclomatic Cognitive
cmd/ckb/format_review_compliance.go ⚠️ 35 ⚠️ 82
cmd/ckb/format_review_sarif.go 15 ⚠️ 27
cmd/ckb/review.go ⚠️ 44 ⚠️ 96
cmd/ckb/review_baseline.go 13 ⚠️ 22
internal/api/handlers_review.go ⚠️ 30 ⚠️ 68
internal/backends/git/diff.go ⚠️ 18 ⚠️ 31
internal/config/config.go ⚠️ 64 ⚠️ 174
internal/mcp/presets_test.go ⚠️ 21 ⚠️ 35
💡 Quick wins · 10 suggestions
📚 Stale docs · 148 broken references

Generated by CKB · Run details

SimplyLiz and others added 9 commits March 19, 2026 08:41
- Serialize complexity/health/hotspots/risk checks into single goroutine
  to prevent go-tree-sitter cgo SIGABRT from concurrent parser use
- Fix SARIF v2.1.0: use RelatedLocations for suggestions instead of
  non-compliant empty Fixes (requires artifactChanges)
- Add path traversal prevention on baseline tags (regex validation)
- Fix matchGlob silent truncation for patterns with 3+ ** wildcards
- Add GHA annotation escaping (%, \r, \n) and markdown pipe escaping
- Fix double file close in calculateBaseFileHealth
- Fix err.Error() != "EOF" to err != io.EOF in HTTP handler
- Fix errcheck violations across format tests and batch tests
- Update MCP preset/budget test counts for new reviewPR tool
- Reformat all files with gofmt
- Add compliance golden file

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- action.yml: Pass all inputs via env vars to prevent script injection
- action.yml: Generate JSON/GHA/markdown in single pass (was 3 runs)
- action.yml: Use env vars for github.repository/PR number in comment step
- Score: Cap per-check deductions at 20 points so noisy checks (coupling
  with 100+ co-change warnings) don't floor the score at 0
- Human format: Fix grade+filename concatenation (missing space)
- Effort: Fix comment claiming 400 LOC/hr (code uses 300/500)
- Classify: Remove dead code path (Additions==0 && Deletions==0 already
  caught by total==0 above), remove unreachable .github map entry
- Baseline: Fix misleading "symlink" comment (it's a copy)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Health check was the main bottleneck — for each file it computed
churn, coupling, bus factor, and age scores TWICE (before + after)
despite these being branch-independent (identical values, zero delta).

Changes:
- Compute repo-level metrics once per file via repoMetrics struct,
  pass to both calculateFileHealth and calculateBaseFileHealth
- Cap health check at 30 files (was unbounded)
- Reduce coupling gap file limit from 30 to 20
- Reduce split coupling lookup limit from 30 to 20
- Add ctx.Err() checks in all per-file loops (health, complexity,
  coupling, split) so cancellation is respected between iterations

For a 39-file PR this cuts ~156 git subprocess calls (4 metrics × 39
files that were duplicated) and caps the total file processing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ckb review CLI examples and reviewPR MCP tool to CLAUDE.md
- Fix reviewPR description: list all 14 checks, say "concurrently where safe"
- Reuse single complexity.Analyzer in health check (avoids 60+ cgo allocs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New pr-review job in CI: runs on PRs after build, posts comment,
  emits GHA annotations, writes job summary
- New examples/github-actions/pr-review.yml documenting full usage
- Update examples README: add pr-review, mark pr-analysis as legacy
- Fix action.yml misleading comment, route exit code through env var

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move Key Risks section after the checks table so the markdown flows as:
checks → narrative → findings. Enable git-blame fallback in reviewer
suggestions so repos without CODEOWNERS still get suggested reviewers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ci.yml: Move pull-requests:write from workflow-level to pr-review job only
  (other jobs no longer get unnecessary PR write access)
- build-matrix.yml: Set cancel-in-progress:false (runs on main push only,
  cancelling artifact builds on rapid merges loses artifacts)
- action/ckb-review: Pin upload-sarif to SHA @b1bff81...dcd061c8 (v4),
  was floating @V3 tag — inconsistent with all other pinned actions
- Update golden for Top Risks section reorder

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- go.mod: Require Go 1.26.1 to resolve GO-2026-4599 through GO-2026-4602
  (crypto/x509 cert validation, net/url IPv6 parsing, os.Root escape)
- ci.yml: Align download-artifact SHA to 018cc2cf... matching nfr.yml
  and security-gate.yml (caught by cicheck consistency test)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The "Fail on review verdict" step referenced ${SCORE} without declaring
it in the env block. Reviewers field now omits from JSON when empty
instead of emitting "reviewers": null.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant