Skip to content

fix(ci): modernize fuzz runtime and attest exact PR head - #547

Closed
seonghobae wants to merge 21 commits into
developfrom
fix/fuzz-setup-node-node24
Closed

fix(ci): modernize fuzz runtime and attest exact PR head#547
seonghobae wants to merge 21 commits into
developfrom
fix/fuzz-setup-node-node24

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Superseded by canonical CI-integrity owner #523

Fresh protected-base and exact-head comparison on 2026-08-20 shows that this PR no longer contains unique product/control behavior that needs a second integration path.

The effective protected-base delta here is limited to .github/workflows/fuzz.yml, tests/unit/coverage-script-contract.test.mjs, docs/doctoring/fuzz-setup-node-runtime.md, and CHANGELOG.md. PR #523 now preserves and strengthens all four semantics:

  • property fuzz explicitly checks out ${{ github.event.pull_request.head.sha || github.sha }}, disables persisted credentials, and fails closed on runtime SHA mismatch;
  • actions/setup-node is immutably pinned to v7.0.0 commit 820762786026740c76f36085b0efc47a31fe5020 while ScopeWeave itself remains on Node.js 22.13.0;
  • fix(ci): execute Server Tests on exact PR heads #523 has a dedicated registered tests/unit/fuzz-exact-head-contract.test.mjs that additionally protects the immutable checkout action, exact expected SHA binding, credential boundary, setup-node revision, deprecated-v4 rejection, and unprivileged pull_request trust boundary;
  • fix(ci): execute Server Tests on exact PR heads #523 preserves the fuzz runtime doctoring/provenance and Unreleased changelog note.

During convergence, #523 also exposed and repaired an unintended history regression that had deleted the published 1.0.0 GitHub Pages note and altered the published 1.0.1 Korean release text. It now has an executable regression that preserves those published notes exactly.

This PR's current repository-native checks are terminal-success, but its current formal review history contains predecessor-head OpenCode CHANGES_REQUESTED verdicts and no qualifying independent current-head approval. Those statuses are not transferred to #523. Closing this PR therefore removes a duplicate writer/integration lane without treating predecessor evidence as merge authority or discarding unique implementation value.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 53 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 629da3a1-7309-49f1-aaad-2c36e459c363

📥 Commits

Reviewing files that changed from the base of the PR and between df0fa17 and 8644756.

📒 Files selected for processing (4)
  • .github/workflows/fuzz.yml
  • CHANGELOG.md
  • docs/doctoring/fuzz-setup-node-runtime.md
  • tests/unit/coverage-script-contract.test.mjs
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/fuzz-setup-node-node24

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as ready for review August 17, 2026 10:17
@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@seonghobae seonghobae changed the title fix(ci): move fuzz setup-node runtime to Node 24 fix(ci): bind fuzz and OSV evidence to exact source revisions Aug 17, 2026
@seonghobae seonghobae changed the title fix(ci): bind fuzz and OSV evidence to exact source revisions fix(ci): modernize fuzz runtime and attest exact PR head Aug 17, 2026

@opencode-agent opencode-agent Bot 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.

Pull request overview

OpenCode reviewed the current-head mergeability evidence and changed-file flow before approval, then found merge conflicts on the affected path.

Findings

1. HIGH Merge Conflict Guidance - Resolve the PR branch against the latest base branch

  • Problem: GitHub reports mergeStateStatus DIRTY for this pull request.
  • Root cause: Branch fix/fuzz-setup-node-node24 cannot be merged cleanly into develop; the changed-file flow below shows which review/runtime path is blocked by the conflict.
  • Fix: Merge or rebase the latest develop into fix/fuzz-setup-node-node24, resolve conflict markers in the PR branch, rerun the focused checks, and push the same branch.
  • Repair commands:
gh pr checkout 547 --repo ContextualWisdomLab/scopeweave
git fetch origin develop
git merge --no-ff origin/develop  # or: git rebase origin/develop
git status --short
# resolve files, then git add <resolved-files>
# merge path: git commit
# rebase path: git rebase --continue
git push origin HEAD:fix/fuzz-setup-node-node24
# rebase path only: git push --force-with-lease origin HEAD:fix/fuzz-setup-node-node24
  • Regression test: Keep OpenCode approval gated on mergeability so model-output failures cannot approve a conflicted PR.

Merge Conflict Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: fuzz.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["required checks"]
  Evidence --> S3["Docs: fuzz-setup-node-runtime.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["docs review"]
  Evidence --> S4["Test: coverage-script-contract.test.mjs"]
  S4 --> I4["regression suite"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["targeted test run"]
Loading
  • Result: REQUEST_CHANGES
  • Reason: mergeStateStatus is DIRTY; mergeable is CONFLICTING.
  • Head SHA: 75b4d86114b99b793a6d64afe070acffc0fd869e
  • Workflow run: 32051152113
  • Workflow attempt: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: fuzz.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V2["required checks"]
  Evidence --> S3["Docs: fuzz-setup-node-runtime.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V3["docs review"]
  Evidence --> S4["Test: coverage-script-contract.test.mjs"]
  S4 --> I4["regression suite"]
  I4 --> Conflict["Merge conflict blocks this path"]
  Conflict --> V4["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: a3c6d2176fd727d3d1623f88f18d362943964fd8
  • Workflow run: 32137165220
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for a3c6d2176fd727d3d1623f88f18d362943964fd8.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: fuzz.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: fuzz.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: fuzz-setup-node-runtime.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: fuzz-setup-node-runtime.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["Test: coverage-script-contract.test.mjs"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: coverage-script-contract.test.mjs"]
  R4 --> V4["targeted test run"]
Loading

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 17, 2026 22:48

Dismissed as stale, addressed evidence: this review was anchored to predecessor head 75b4d86 and requested conflict resolution. Current head a3c6d21 is a non-destructive merge of current protected develop@1fadec04195805722829b386475a09a15f8cd926, GitHub now reports the PR mergeable, and all six repository-native current-head workflows (Server Tests, Fuzz, Security Scan, Dependency Review, SAST Semgrep, OSV Scanner) are terminal success. This dismissal does not constitute approval and does not substitute for the required independent current-head review or central corrected review/security evidence.

@opencode-agent opencode-agent Bot 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.

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for a3c6d2176fd727d3d1623f88f18d362943964fd8.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: fuzz.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: fuzz.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: fuzz-setup-node-runtime.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: fuzz-setup-node-runtime.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["Test: coverage-script-contract.test.mjs"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: coverage-script-contract.test.mjs"]
  R4 --> V4["targeted test run"]
Loading

@opencode-agent opencode-agent Bot 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.

Pull request overview

OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.

Findings

1. HIGH Current-head GitHub Checks - Fix failed required checks before approval

  • Problem: Failed same-head checks remain for a3c6d2176fd727d3d1623f88f18d362943964fd8.
  • Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
  • Fix: Read and fix the failed check logs below, then rerun the current-head checks.
  • Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.

Failed checks:

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: fuzz.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: fuzz.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file: CHANGELOG.md"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
  R2 --> V2["required checks"]
  Evidence --> S3["Docs: fuzz-setup-node-runtime.md"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs: fuzz-setup-node-runtime.md"]
  R3 --> V3["docs review"]
  Evidence --> S4["Test: coverage-script-contract.test.mjs"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: coverage-script-contract.test.mjs"]
  R4 --> V4["targeted test run"]
Loading

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review the exact current contributor head 8644756958ba4252b7d0d539a6ba92f0cd42ac9b against live develop@df0fa17bd5035af6455c889022c540b4f439e3d6. Fresh comparison is ahead-only/zero-behind and limited to .github/workflows/fuzz.yml, CHANGELOG.md, docs/doctoring/fuzz-setup-node-runtime.md, and tests/unit/coverage-script-contract.test.mjs. Revalidate the immutable setup-node v7 pin, exact PR-head checkout/runtime attestation, and absence of regression to protected orchestrator/security behavior; do not transfer predecessor-head review evidence.

@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base="df0fa17bd5035af6455c889022c540b4f439e3d6"
head="8644756958ba4252b7d0d539a6ba92f0cd42ac9b"
repo="ContextualWisdomLab/scopeweave"

echo "== Exact commit objects =="
git cat-file -t "$base"
git cat-file -t "$head"
echo "base=$(git rev-parse "$base^{commit}")"
echo "head=$(git rev-parse "$head^{commit}")"

echo "== Relationship: behind ahead =="
git rev-list --left-right --count "$base...$head"

echo "== Changed paths and status =="
git diff --name-status "$base" "$head"
echo "== Diffstat =="
git diff --stat "$base" "$head"

echo "== Scoped diff =="
git diff --no-ext-diff --unified=80 "$base" "$head" -- \
  .github/workflows/fuzz.yml \
  CHANGELOG.md \
  docs/doctoring/fuzz-setup-node-runtime.md \
  tests/unit/coverage-script-contract.test.mjs

echo "== Current head workflow =="
git show "$head:.github/workflows/fuzz.yml"

echo "== Current head contract test =="
git show "$head:tests/unit/coverage-script-contract.test.mjs"

echo "== PR metadata and checks for requested head =="
gh pr view 547 --repo "$repo" --json number,state,isDraft,mergeable,headRefOid,baseRefOid,headRefName,baseRefName,reviewDecision,statusCheckRollup

Length of output: 34722


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ContextualWisdomLab/scopeweave"
head="8644756958ba4252b7d0d539a6ba92f0cd42ac9b"

echo "== setup-node v7.0.0 tag and action runtime =="
gh api repos/actions/setup-node/git/ref/tags/v7.0.0 --jq '.object.type + " " + .object.sha'
gh api repos/actions/setup-node/contents/action.yml?ref=820762786026740c76f36085b0efc47a31fe5020 \
  --jq '.content' \
  | tr -d '\n' \
  | base64 --decode \
  | sed -n '/^runs:/,/^[^[:space:]]/p'

echo "== Selected current PR workflow runs =="
for run in 32231659491 32231659417 32231659420 32231659443 32231659839; do
  gh api "repos/$repo/actions/runs/$run" \
    --jq '"run=\(.id) workflow=\(.name) event=\(.event) head_sha=\(.head_sha) conclusion=\(.conclusion)"'
done

echo "== PR review decisions and commit anchors =="
gh api "repos/$repo/pulls/547/reviews?per_page=100" \
  --jq '.[] | "id=\(.id) user=\(.user.login) state=\(.state) commit_id=\(.commit_id) submitted_at=\(.submitted_at) body=\(.body | gsub("[\r\n]+"; " ") | .[0:240])"'

Length of output: 3239


@seonghobae Reviewed 8644756958ba4252b7d0d539a6ba92f0cd42ac9b against develop@df0fa17bd5035af6455c889022c540b4f439e3d6.

No code findings.

  • The comparison is ahead-only: 0 behind and 21 ahead.
  • The diff contains only the four requested files.
  • actions/setup-node is pinned to immutable v7.0.0 commit 820762786026740c76f36085b0efc47a31fe5020.
  • The pinned action metadata declares runs.using: 'node24'.
  • ScopeWeave still runs with Node.js 22.13.0.
  • The Fuzz workflow checks out ${{ github.event.pull_request.head.sha || github.sha }} with persist-credentials: false.
  • The workflow fails closed unless git rev-parse HEAD equals the expected SHA.
  • The executable contract covers the v7 pin, removal of v4.1.0, exact checkout ref, expected SHA, and checkout attestation.
  • The Fuzz, Server Tests, Security Scan, Dependency Review, and OSV Scanner runs succeeded on this exact head.
  • The diff does not change protected orchestrator or security workflow definitions.

I did not treat the prior CHANGES_REQUESTED reviews as current-head evidence. They target a3c6d2176fd727d3d1623f88f18d362943964fd8, not the reviewed head. The dismissed merge-conflict review targets 75b4d86114b99b793a6d64afe070acffc0fd869e.

A qualifying independent current-head approval remains a separate governance requirement.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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