Skip to content

ci: wire eval reproducibility self-check - #416

Merged
KooshaPari merged 1 commit into
mainfrom
fix/eval-repro-ci-anchor-20260807
Aug 7, 2026
Merged

ci: wire eval reproducibility self-check#416
KooshaPari merged 1 commit into
mainfrom
fix/eval-repro-ci-anchor-20260807

Conversation

@KooshaPari

@KooshaPari KooshaPari commented Aug 7, 2026

Copy link
Copy Markdown
Owner

User description

Summary

  • add the missing eval-repro-check.ps1 SelfCheck anchor to CI
  • run the hermetic PowerShell SelfCheck on pull requests

Evidence

  • actionlint parses the workflow; existing advisory warnings remain
  • git diff --check clean for the workflow change

Known baseline: the SelfCheck currently reports a pre-existing Cargo.lock hash mismatch (manifest expects 4176b8..., current lock is 51c723...), so this PR addresses only the missing CI wiring anchor and does not alter the manifest.


CodeAnt-AI Description

Run an eval reproducibility self-check on pull requests

What Changed

  • Pull requests now run a dedicated eval reproducibility self-check in CI
  • The check validates that the workflow remains aligned with the reproducibility manifest

Impact

✅ Earlier detection of eval reproducibility drift
✅ Consistent reproducibility checks on pull requests

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Copilot AI lite review requested due to automatic review settings August 7, 2026 01:48
@codeant-ai

codeant-ai Bot commented Aug 7, 2026

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Reviewed your PR 5f7fcb8 Aug 07, 2026 · 01:48 01:49

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@codeant-ai

codeant-ai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary

Adds a pull-request-only eval-reproducibility-policy job to .github/workflows/ci.yml.

The job:

  • Checks out the repository.
  • Installs the stable Rust toolchain.
  • Runs eval-repro-check.ps1 -SelfCheck in a hermetic PowerShell environment.

actionlint passes with existing advisory warnings. git diff --check is clean.

The SelfCheck still reports a pre-existing Cargo.lock hash mismatch. This pull request does not modify the manifest.

Must Fix

None identified.

Should Fix

None identified.

Consider

Investigate the pre-existing Cargo.lock hash mismatch in a separate change.

Approve / Request Changes

Approve. The CI wiring change is scoped and introduces no public API changes.

Walkthrough

The CI workflow adds a pull-request-only job that checks out the repository, installs stable Rust, and runs the evaluation reproducibility script in -SelfCheck mode on Ubuntu.

Changes

Evaluation reproducibility validation

Layer / File(s) Summary
Pull-request SelfCheck job
.github/workflows/ci.yml
Adds the eval-reproducibility-policy job for pull requests. The job checks out the repository, installs stable Rust, and runs the evaluation reproducibility SelfCheck on Ubuntu.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the CI change that wires the evaluation reproducibility self-check.
Description check ✅ Passed The description directly explains the CI wiring, self-check behavior, validation evidence, and known baseline issue.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/eval-repro-ci-anchor-20260807
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch fix/eval-repro-ci-anchor-20260807

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.

@codeant-ai codeant-ai Bot added the size:S This PR changes 10-29 lines, ignoring generated files label Aug 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Line 183: Remove the dtolnay/rust-toolchain@stable step from the SelfCheck
job, preserving the remaining file-only validation steps and workflow behavior.
- Around line 182-183: Pin the mutable action references in the workflow:
replace actions/checkout@v7 with a full commit SHA, and replace
dtolnay/rust-toolchain@stable with the exact compatible commit SHA while
preserving the required Rust toolchain behavior.
- Around line 184-186: Update the recorded Cargo.lock hash in eval-manifest.json
to the current hash expected by eval-repro-check.ps1 and tests/eval_repro.rs
before keeping the eval reproducibility SelfCheck job blocking; otherwise make
the workflow step advisory until the manifest baseline is corrected.
- Line 182: Update the actions/checkout step in the eval reproducibility job to
set persist-credentials to false, and ensure that job’s GITHUB_TOKEN permissions
remain limited to contents: read.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8b30f0ec-0e8f-4328-80c8-6a50ed9e151f

📥 Commits

Reviewing files that changed from the base of the PR and between 2c712cb and 5f7fcb8.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml
📜 Review details
⏰ Context from checks skipped due to timeout. (38)
  • GitHub Check: semgrep-cloud-platform/scan
  • GitHub Check: Kilo Code Review
  • GitHub Check: sl-daemon · repository builder image offline build / sl-daemon · repository builder image offline build
  • GitHub Check: jemalloc hard · feature build
  • GitHub Check: miri permutation · race_model
  • GitHub Check: miri permutation · SelfCheck
  • GitHub Check: signing hard · SelfCheck
  • GitHub Check: jemalloc default-on · windows default build
  • GitHub Check: session-ledger build · macos-latest
  • GitHub Check: sl-viewer macOS app · artifact
  • GitHub Check: pipeline perf regression gate
  • GitHub Check: session-ledger build · windows-latest
  • GitHub Check: tsan permutation · race_model
  • GitHub Check: session-ledger build · ubuntu-latest
  • GitHub Check: update check hard · sl-daemon tests
  • GitHub Check: jemalloc default-on · unix default build
  • GitHub Check: sl-daemon build · windows-latest
  • GitHub Check: load macro gate · macro routes smoke
  • GitHub Check: exotic check · aarch64-unknown-linux-gnu
  • GitHub Check: daemon graph hard · SelfCheck
  • GitHub Check: update check hard · root SelfCheck wrapper
  • GitHub Check: soft shuttle · SelfCheck
  • GitHub Check: cargo audit
  • GitHub Check: prepare
  • GitHub Check: cargo deny check
  • GitHub Check: loom permutation · core models
  • GitHub Check: fuzz blocking · sustained 30s
  • GitHub Check: loom permutation · hermetic wrappers
  • GitHub Check: soft loom · loom_model core
  • GitHub Check: visual contract · WCAG AA
  • GitHub Check: sl-viewer help · unit tests
  • GitHub Check: shuttle permutation · cargo test shuttle_permutation
  • GitHub Check: soft loom · daemon broadcast
  • GitHub Check: race smoke + channel/cancel model · macos-latest
  • GitHub Check: race smoke + channel/cancel model · windows-latest
  • GitHub Check: Summary
  • GitHub Check: prepare
  • GitHub Check: browser e2e · axe · responsive · visual
⚠️ CI failures not shown inline (2)

GitHub Actions: Trunk Check / Lint & Format: ci: wire eval reproducibility self-check

Conclusion: failure

View job details

##[group]GITHUB_TOKEN Permissions
 Contents: read
 Metadata: read
 Packages: read
 ##[endgroup]
 Secret source: Actions
 Prepare workflow directory
 Prepare all required actions
 Getting action download info
 ##[error]Unable to resolve action `trunk-io/trunk-action@d90b9166660d5e5afae248a58172a3a0e99d56d5`, unable to find version `d90b9166660d5e5afae248a58172a3a0e99d56d5`

GitHub Actions: Trunk Check / 0_Lint & Format.txt: ci: wire eval reproducibility self-check

Conclusion: failure

View job details

##[group]GITHUB_TOKEN Permissions
 Contents: read
 Metadata: read
 Packages: read
 ##[endgroup]
 Secret source: Actions
 Prepare workflow directory
 Prepare all required actions
 Getting action download info
 ##[error]Unable to resolve action `trunk-io/trunk-action@d90b9166660d5e5afae248a58172a3a0e99d56d5`, unable to find version `d90b9166660d5e5afae248a58172a3a0e99d56d5`
🧰 Additional context used
🪛 GitHub Actions: rootless matrix / 0_rootless-only matrix · SelfCheck.txt
.github/workflows/ci.yml

[error] 1-1: Rootless matrix self-check failed: ci.yml is missing the required reference to 'rootless-matrix.yml'. Command './scripts/rootless-matrix-check.ps1 -SelfCheck' exited with code 1.

🪛 GitHub Actions: rootless matrix / rootless-only matrix · SelfCheck
.github/workflows/ci.yml

[error] 1-1: Rootless matrix scaffold self-check failed: ci.yml is missing the required reference to 'rootless-matrix.yml'. Command './scripts/rootless-matrix-check.ps1 -SelfCheck' exited with code 1.

🪛 GitHub Actions: rootless no-net / 0_rootless_no-net · SelfCheck.txt
.github/workflows/ci.yml

[error] 1-1: rootless-nonet-check.ps1 SelfCheck failed because ci.yml is missing the required rootless-nonet workflow anchor 'rootless-nonet.yml'. Command './scripts/rootless-nonet-check.ps1 -SelfCheck' exited with code 1.

🪛 GitHub Actions: rootless no-net / rootless_no-net · SelfCheck
.github/workflows/ci.yml

[error] 1-1: The rootless/no-net SelfCheck failed because ci.yml is missing the required workflow reference anchor 'rootless-nonet.yml'. Command './scripts/rootless-nonet-check.ps1 -SelfCheck' exited with code 1.

🪛 zizmor (1.29.0)
.github/workflows/ci.yml

[warning] 182-182: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 182-182: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 183-183: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[info] 183-183: action functionality is already included by the runner (superfluous-actions): use rustup and/or cargo in a script step

(superfluous-actions)

🔇 Additional comments (1)
.github/workflows/ci.yml (1)

174-181: LGTM!

Comment thread .github/workflows/ci.yml
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== workflow excerpt =="
sed -n '1,260p' .github/workflows/ci.yml | nl -ba | sed -n '150,215p'

echo
echo "== checkout usages in ci.yml =="
rg -n "actions/checkout|persist-credentials|permissions:|github-token|GITHUB_TOKEN|eval-repro-check.ps1" .github/workflows/ci.yml

echo
echo "== changed lines/stat =="
git diff --stat -- .github/workflows/ci.yml || true
git diff --unified=80 -- .github/workflows/ci.yml | sed -n '1,260p' || true

echo
echo "== scripts eval-repro-check context =="
if [ -f ./scripts/eval-repro-check.ps1 ]; then
  wc -l ./scripts/eval-repro-check.ps1
  rg -n "git|github|curl|invoke|rest|token|secret|env\\.|ProcessStart|powershell|pwsh" ./scripts/eval-repro-check.ps1 || true
fi

Repository: KooshaPari/SessionLedger

Length of output: 225


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== workflow excerpt =="
sed -n '1,260p' .github/workflows/ci.yml | awk '{printf "%5d  %s\n", NR, $0}' | sed -n '140,220p'

echo
echo "== checkout usages in ci.yml =="
grep -En "actions/checkout|persist-credentials|permissions:|github-token|GITHUB_TOKEN|eval-repro-check.ps1" .github/workflows/ci.yml || true

echo
echo "== changed lines/stat =="
git diff --stat -- .github/workflows/ci.yml || true
git diff --unified=120 -- .github/workflows/ci.yml | sed -n '1,260p' || true

echo
echo "== scripts eval-repro-check context =="
if [ -f ./scripts/eval-repro-check.ps1 ]; then
  wc -l ./scripts/eval-repro-check.ps1
  grep -En "git|github|curl|invoke|rest|token|secret|env\\.|ProcessStart|powershell|pwsh" ./scripts/eval-repro-check.ps1 || true
fi

Repository: KooshaPari/SessionLedger

Length of output: 4395


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== full eval-repro-check.ps1 =="
awk '{printf "%5d  %s\n", NR, $0}' ./scripts/eval-repro-check.ps1

echo
echo "== root workflow permissions and checkout steps =="
awk '/^\s*- uses: actions\/checkout@v7|^\s*permissions:|^\s*github-token|^\s*GITHUB_TOKEN|^\s*run: ./ {print NR ": " $0}' .github/workflows/ci.yml

echo
echo "== actions/checkout v7 README from upstream =="
curl -fsSL https://raw.githubusercontent.com/actions/checkout/v7/README.md | sed -n '1,220p'

Repository: KooshaPari/SessionLedger

Length of output: 18533


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== ci.yml top permissions block and checkout at eval job =="
awk '{printf "%5d  %s\n", NR, $0}' .github/workflows/ci.yml | sed -n '1,25p'
awk '{printf "%5d  %s\n", NR, $0}' .github/workflows/ci.yml | sed -n '176,186p'

echo
echo "== actions/checkout v7 package/action.yml =="
url="https://raw.githubusercontent.com/actions/checkout/v7/action.yml"
echo "$url"
curl -fsSL "$url"

echo
echo "== deterministic workflow/static check =="
python3 - <<'PY'
from pathlib import Path
import re
p = Path(".github/workflows/ci.yml")
s = p.read_text()
job = "eval-reproducibility-policy"
pattern = re.compile(rf'^\s*{re.escape(job)}:\s*\n((?:\n{re.escape("      ")-}"\s*.*)*)', re.M)
m = pattern.search(s)
if not m:
    print("JOB_NOT_FOUND")
    raise SystemExit(0)
job_block = m.group(1)
checkout_indent = len(re.search(r'^( +)', s[s.find(f'- uses: actions/checkout@v7', s.find(job))]).group(1))
print("found_job_block_lines=" + str(len(job_block.splitlines())))
text = job_block
for needle in ["actions/checkout@v7", "-SelfCheck", "persist-credentials"]:
    print(f"contains-{needle}=" + str(needle in text))
root_checkout_line = s.find("steps:\n", s.find("permissions:"))
checkout1 = s.find("- uses: actions/checkout@v7", root_checkout_line)
root_checkout = s[checkout1:checkout1+80]
print("root_checkout_has_persist_false=" + ("persist-credentials: false" in root_checkout or "persist-credentials: false" in s[s.find(root_checkout):]))
print("root_checkout_block=" + repr(s[checkout1:checkout1+120]))
PY

Repository: KooshaPari/SessionLedger

Length of output: 6871


Disable persisted checkout credentials in the eval reproducibility job.

This job runs ./scripts/eval-repro-check.ps1 under a pull request checkout. actions/checkout@v7 persists the token to local Git config by default, and eval-repro-check.ps1 can execute git commands, so subsequent repository-controlled steps can reuse that credential. Set persist-credentials: false, and verify the job does not need a broader GITHUB_TOKEN permission than contents: read.

Proposed fix
       - uses: actions/checkout@v7
+        with:
+          persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: actions/checkout@v7
- uses: actions/checkout@v7
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.29.0)

[warning] 182-182: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 182-182: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 182, Update the actions/checkout step in
the eval reproducibility job to set persist-credentials to false, and ensure
that job’s GITHUB_TOKEN permissions remain limited to contents: read.

Source: Linters/SAST tools

Comment thread .github/workflows/ci.yml
Comment on lines +182 to +183
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Relevant workflow lines:"
sed -n '160,200p' .github/workflows/ci.yml 2>/dev/null || true

echo
echo "All action uses in workflow:"
rg -n '^\s*-\s*uses:\s*[^#]+' .github/workflows/ci.yml || true

echo
echo "Git refs in repo (if any):"
git ls-files | rg '(^|/)\.github/workflows/ci.yml$' || true

Repository: KooshaPari/SessionLedger

Length of output: 2392


🌐 Web query:

actions/checkout v7 does not exist

💡 Result:

The claim that actions/checkout v7 does not exist is incorrect. Actions/checkout v7 was released on June 18, 2026 [1][2]. As of August 7, 2026, version v7.0.1 is available [3][4]. Actions/checkout v7 introduced significant changes, including a default refusal to check out fork pull request code when using certain triggers like pull_request_target or workflow_run to mitigate security vulnerabilities [1][5]. It also migrated the action to ESM [5]. Users who need to override this new default behavior can use the allow-unsafe-pr-checkout: true input [5].

Citations:


🌐 Web query:

dtolnay/rust-toolchain stable branch commit

💡 Result:

The dtolnay/rust-toolchain GitHub Action does not use a fixed release branch or a static commit for its stable functionality [1][2]. Instead, it uses branch names (such as stable, nightly, or master) as versioning mechanisms, which are dynamically managed by the author [1][2]. For users, the recommended way to use the action is to reference these branch names directly (e.g., uses: dtolnay/rust-toolchain@stable) [3][2]. Because the author frequently rebases these branches, pinning the action to a specific commit SHA is generally discouraged and can cause workflows to fail or lose functionality, such as automatic toolchain detection [1][2]. If you must use a commit SHA, it must reside within the history of the master branch to avoid being garbage-collected [3][4]. There is no permanent stable branch commit; the reference @stable is a moving target maintained by the repository owner [1][2].

Citations:


Use checked-in versions for mutable workflow actions.

These references can change without a full SHA pin. Pin actions/checkout to a full commit SHA. For dtolnay/rust-toolchain@stable, use the exact commit that supports the required toolchain if pinning remains acceptable for this workflow.

🧰 Tools
🪛 zizmor (1.29.0)

[warning] 182-182: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 182-182: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 183-183: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[info] 183-183: action functionality is already included by the runner (superfluous-actions): use rustup and/or cargo in a script step

(superfluous-actions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 182 - 183, Pin the mutable action
references in the workflow: replace actions/checkout@v7 with a full commit SHA,
and replace dtolnay/rust-toolchain@stable with the exact compatible commit SHA
while preserving the required Rust toolchain behavior.

Source: Linters/SAST tools

Comment thread .github/workflows/ci.yml
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Remove the Rust setup from this file-only SelfCheck.

The shown SelfCheck branch checks repository files and text anchors. It does not invoke cargo, rustup, or the Rust wrapper. This action adds network and startup cost without affecting the check. Remove Line 183 unless omitted script logic requires Rust.

Proposed fix
-      - uses: dtolnay/rust-toolchain@stable
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: dtolnay/rust-toolchain@stable
🧰 Tools
🪛 zizmor (1.29.0)

[error] 183-183: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[info] 183-183: action functionality is already included by the runner (superfluous-actions): use rustup and/or cargo in a script step

(superfluous-actions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 183, Remove the
dtolnay/rust-toolchain@stable step from the SelfCheck job, preserving the
remaining file-only validation steps and workflow behavior.

Source: Linters/SAST tools

Comment thread .github/workflows/ci.yml
Comment on lines +184 to +186
- name: eval reproducibility SelfCheck
shell: pwsh
run: ./scripts/eval-repro-check.ps1 -SelfCheck

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -u

echo "Files:"
git ls-files | rg '(^\.github/workflows/ci\.yml$|^scripts/eval-repro-check\.ps1$|^tests/eval_repro\.rs$|Cargo\.lock$)' || true

echo
echo "Workflow excerpt:"
if [ -f .github/workflows/ci.yml ]; then
  nl -ba .github/workflows/ci.yml | sed -n '160,200p'
fi

echo
echo "Script outline/size:"
for f in scripts/eval-repro-check.ps1 tests/eval_repro.rs Cargo.lock .github/workflows/ci.yml; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    wc -l "$f"
  fi
done

echo
echo "Relevant evaluations:"
rg -n "SelfCheck|Cargo\.lock|eval-repro-check|output\.status\.success|hash|cargo" scripts/eval-repro-check.ps1 tests/eval_repro.rs .github/workflows/ci.yml || true

echo
echo "Script relevant sections:"
if [ -f scripts/eval-repro-check.ps1 ]; then
  nl -ba scripts/eval-repro-check.ps1 | sed -n '1,260p'
fi

echo
echo "Integration test relevant sections:"
if [ -f tests/eval_repro.rs ]; then
  nl -ba tests/eval_repro.rs | sed -n '1,240p'
fi

Repository: KooshaPari/SessionLedger

Length of output: 5134


🏁 Script executed:

#!/bin/bash
set -u

# Inspect the exact hash value recorded by the script and current Cargo.lock.
python3 - <<'PY'
import subprocess, pathlib, re

script = pathlib.Path('scripts/eval-repro-check.ps1')
if script.exists():
    txt = script.read_text(errors='replace')
    for i,line in enumerate(txt.splitlines(),1):
        if 'cargo lockfile' in line.lower() or 'encoded hash' in line.lower() or 'write' in line.lower():
            print(f'{i}: {line}')
else:
    print('script missing')

path = pathlib.Path('Cargo.lock')
if path.exists():
    data = path.read_bytes()
    print(f'Cargo.lock bytes: {len(data)}')
    print('sha256 (base16):', subprocess.check_output(['shasum','-a','256','Cargo.lock']).decode().strip())
PY

Repository: KooshaPari/SessionLedger

Length of output: 1453


🏁 Script executed:

#!/bin/bash
# shellcheck disable=SC1091
set -u

echo "Script content:"
awk '{printf "%-5d %s\n", NR, $0}' scripts/eval-repro-check.ps1

echo
echo "Cargo.lock hash from available tools:"
command -v sha256sum shasum openssl python3 2>/dev/null
sha256sum Cargo.lock 2>/dev/null || true
openssl dgst -sha256 Cargo.lock 2>/dev/null || true

echo
echo "Inspect manifest file and cargo_lock_sha256 presence:"
rg -n '"cargo_lock_sha256"|eval-manifest|eval manifest|eval-repro-check|SelfCheck|cargo-deny:"' README.md docs .github packages crates scripts tests 2>/dev/null || true

echo
echo "Workflow SelfCheck and job dependency excerpt:"
awk 'NR>=170 && NR<=245 {printf "%-5d %s\n", NR, $0}' .github/workflows/ci.yml

echo
echo "Integration test excerpt:"
awk '{printf "%-5d %s\n", NR, $0}' tests/eval_repro.rs

Repository: KooshaPari/SessionLedger

Length of output: 50381


🏁 Script executed:

#!/bin/bash
set -u

echo "Find eval manifest files:"
git ls-files | rg '(^|/)eval-manifest\.json$' || true

echo
echo "All cargo_lock_sha256 occurrences:"
rg -n '"cargo_lock_sha256"' --glob '!**/.git/**' .

echo
echo "Exact manifest content if present:"
for f in docs/ops/eval-manifest.json eval-manifest.json; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    python3 -c "
import json
from pathlib import Path
p=Path('$f')
try:
    data=json.loads(p.read_text())
    print('cargo_lock_sha256 =', repr(data.get('cargo_lock_sha256')))
except Exception as e:
    print('parse error:', repr(e))
"
  fi
done

Repository: KooshaPari/SessionLedger

Length of output: 535


Repair the recorded Cargo.lock hash before making this job blocking.

docs/ops/eval-manifest.json records 4176b887c54d8405a68b5a86b122a29d95f738990156865f01cae8300e7d3f49, but Cargo.lock hashes to 51c723aedcc67d0e5db4a5705ed08d4bedf2c5a3ad226b5fe308cdf5b163f206. eval-repro-check.ps1 -SelfCheck throws on this mismatch, and tests/eval_repro.rs requires output.status.success(), so every pull request fails because this job is not advisory. Update docs/ops/eval-manifest.json with the current hash, or keep the CI step advisory until the baseline is fixed.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 184 - 186, Update the recorded
Cargo.lock hash in eval-manifest.json to the current hash expected by
eval-repro-check.ps1 and tests/eval_repro.rs before keeping the eval
reproducibility SelfCheck job blocking; otherwise make the workflow step
advisory until the manifest baseline is corrected.

@KooshaPari
KooshaPari merged commit 750c176 into main Aug 7, 2026
95 of 110 checks passed
@KooshaPari
KooshaPari deleted the fix/eval-repro-ci-anchor-20260807 branch August 7, 2026 06:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants