Skip to content

feat: Add lane off-chain readiness preflight - #1432

Open
athegaul wants to merge 2 commits into
mainfrom
CCIP-13390/lane-readiness
Open

feat: Add lane off-chain readiness preflight#1432
athegaul wants to merge 2 commits into
mainfrom
CCIP-13390/lane-readiness

Conversation

@athegaul

@athegaul athegaul commented Sep 8, 2026

Copy link
Copy Markdown

New preflight package checks that the verifier and executor jobs serving a lane chain exist, are approved, and that their deployed spec covers that chain. The lane changesets in chainlink-ccip cannot read this job state, so this closes the gap before a lane is wired up.

New preflight package checks that the verifier and executor jobs serving a lane chain exist, are approved, and that their deployed spec covers that chain. The lane changesets in chainlink-ccip cannot read this job state, so this closes the gap before a lane is wired up.
@athegaul
athegaul requested a review from a team as a code owner September 8, 2026 17:08
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

👋 athegaul, thanks for creating this pull request!

To help reviewers, please consider creating future PRs as drafts first. This allows you to self-review and make any final changes before notifying the team.

Once you're ready, you can mark it as "Ready for review" to request feedback. Thanks!

@athegaul athegaul changed the title CCIP-13390:Aadd lane off-chain readiness preflight CCIP-13390: Add lane off-chain readiness preflight Sep 8, 2026
@athegaul athegaul changed the title CCIP-13390: Add lane off-chain readiness preflight feat: Add lane off-chain readiness preflight Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

Code coverage report:

Package main CCIP-13390/lane-readiness Diff
github.com/smartcontractkit/chainlink-ccv/aggregator 50.86% 50.86% +0.00%
github.com/smartcontractkit/chainlink-ccv/bootstrap 72.00% 72.00% +0.00%
github.com/smartcontractkit/chainlink-ccv/cli 58.12% 58.12% +0.00%
github.com/smartcontractkit/chainlink-ccv/cmd 35.65% 35.65% +0.00%
github.com/smartcontractkit/chainlink-ccv/common 47.76% 47.76% +0.00%
github.com/smartcontractkit/chainlink-ccv/executor 42.80% 42.80% +0.00%
github.com/smartcontractkit/chainlink-ccv/indexer 35.55% 35.59% +0.04%
github.com/smartcontractkit/chainlink-ccv/integration 59.09% 59.09% +0.00%
github.com/smartcontractkit/chainlink-ccv/internal 0.00% 0.00% +0.00%
github.com/smartcontractkit/chainlink-ccv/migration 78.70% 78.70% +0.00%
github.com/smartcontractkit/chainlink-ccv/pkg 100.00% 100.00% +0.00%
github.com/smartcontractkit/chainlink-ccv/pricer 0.00% 0.00% +0.00%
github.com/smartcontractkit/chainlink-ccv/protocol 63.46% 63.46% +0.00%
github.com/smartcontractkit/chainlink-ccv/tools 43.61% 43.61% +0.00%
github.com/smartcontractkit/chainlink-ccv/verifier 36.72% 36.72% +0.00%
Total 50.80% 50.80% +0.00%

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Job selection and deployed-spec validation can produce incorrect or nondeterministic readiness results.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds preflight validation for off-chain lane readiness.

Changes:

  • Checks verifier and executor jobs for existence, approval, and chain coverage.
  • Adds tests for missing, unapproved, and incomplete jobs.
File summaries
File Description
deployment/preflight/lane_prereqs.go Implements lane readiness checks.
deployment/preflight/lane_prereqs_test.go Tests readiness outcomes.
Review details

Suppressed comments (2)

deployment/preflight/lane_prereqs.go:129

  • Qualifier matching is not position-aware. For example, qualifier default also matches nop-default-other-verifier because default appears in the alias/aggregator portion, even though that job belongs to committee other. This can select a job from the wrong scope; the existing scope implementations in deployment/shared/types.go:127-129 and :193-195 match the complete trailing scope instead.
	return strings.HasSuffix(jobID, "-"+kind) && strings.Contains(jobID, "-"+qualifier+"-")

deployment/preflight/lane_prereqs.go:123

  • JobInfo.Spec is the locally desired spec, not necessarily the deployed one: JD's proposal specs are stored in Proposals, and sync explicitly permits/report spec drift without replacing this field. Consequently, an approved job whose deployed spec omits this chain can pass if the local desired spec contains it. Also, a raw substring can match the selector in unrelated values or as part of another selector. Read the active proposal's spec and parse the relevant verifier/executor chain-config map to test an exact key.
	if !strings.Contains(found.Spec, chainKey) {
		return fmt.Errorf("NOP %q job %q: %w", alias, found.JobID, ErrJobMissingChain)
	}
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +108 to +112
for jobID, info := range jobs[alias] {
if jobMatches(string(jobID), kind, qualifier) {
found = &info
break
}
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.

2 participants