Repository navigation
fix(ci): enforce the ordinary eval output workspace - #329
Conversation
Implements TC-6773 Assisted-by: Claude Code
Reviewer's GuideThe ordinary PR eval workflow now explicitly authorizes and consistently uses the requested absolute output workspace, rejects successful CLI runs that do not produce all three nonempty result files there, and continues processing subsequent skills after failures. End-to-end tests exercise the real shell workflow and cover valid output, misplaced or invalid artifacts, CLI failures, sandbox settings, workspace grants, and continuation behavior. Sequence diagram for enforced ordinary eval workspacesequenceDiagram
participant Workflow
participant Claude
participant Workspace
participant Validator
participant NextSkill
Workflow->>Claude: invoke with workspace and --add-dir workspace
Claude->>Workspace: write benchmark.json
Claude->>Workspace: write feedback.json
Claude->>Workspace: write summary.md
Workflow->>Validator: check required files in workspace
alt all files are nonempty regular files
Validator-->>Workflow: validation passes
else missing, empty, directory, or relocated artifact
Validator-->>Workflow: mark skill failed
end
Workflow->>NextSkill: continue processing subsequent skill
Flow diagram for ordinary eval result validationflowchart TD
A[Start skill eval] --> B[Invoke Claude with exact workspace grant]
B --> C{CLI exits successfully?}
C -- No --> D[Mark skill failed]
C -- Yes --> E{benchmark.json feedback.json summary.md are nonempty regular files in workspace?}
E -- Yes --> F[Accept skill results]
E -- No --> D
D --> G[Continue to next skill]
F --> G
G --> H[Finish workflow with failure status if any skill failed]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've found 1 issue
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path=".github/workflows/eval-pr-run.yml" line_range="398" />
<code_context>
find "${workspace}" -type f 2>/dev/null | head -80 || true
+
+ for result in benchmark.json feedback.json summary.md; do
+ if [ ! -f "${workspace}/${result}" ] || [ ! -s "${workspace}/${result}" ]; then
+ echo "::error::Missing or empty required eval result: ${workspace}/${result}"
+ failed=1
</code_context>
<issue_to_address>
**Outside files pass result validation**
When a required result path is a symlink to a nonempty file outside the workspace, `[ -f ]` and `[ -s ]` follow the link, so validation accepts the outside file; the publisher also follows a linked `summary.md` and publishes its contents as eval results, even though no regular result file was written in the workspace.
Reject symlinked result paths and require each required artifact to be a nonempty regular file inside the workspace.
Also at `.github/workflows/eval-pr-run.yml:399`.
</issue_to_address>Sourcery assessment
Approval pending. 1 finding to address first.
Blocking findings: .github/workflows/eval-pr-run.yml:398
|
[sdlc-workflow/verify-pr] Re: @sourcery-ai review — Classified as code change request — sub-task TC-6774 created to address this feedback (the symlink-following result validation at |
Verification Report for TC-6773 (commit 409f1e0)
Overall: WARNThe one actionable review finding — the Sourcery symlink-following validation gap at This comment was AI-generated by sdlc-workflow/verify-pr v0.13.9. |
Implements TC-6774 Assisted-by: Claude Code
Refs TC-6773 Assisted-by: Claude Code
Verification Report for TC-6773 (commit b512bc0)
Overall: WARNThe core fix is sound and complete: the ordinary eval CI now grants Claude the exact requested workspace ( WARN is driven by two non-blocking items, both already handled:
This skill does not merge the PR and does not transition the issue — a human reviewer decides. This comment was AI-generated by sdlc-workflow/verify-pr v0.13.10. |
Summary
Implements TC-6773, fixing TC-6772.
benchmark.json,feedback.jsonandsummary.mdare nonempty regular files in that workspace.This addresses PR #299 run 37617450108, which posted “No results produced” despite a successful ordinary job. The misplaced-output and missing-output cases are reproduced by tests executing the real workflow shell with a non-inference Claude stub.
Validation
git diff --check: passed.Rollout and limits
Hosted PR evals execute the workflow from trusted
main, so this small fix must merge before rerunning #299. It changes only the ordinary invocation and required output-file checks. WIF, credential isolation, approval gates, native source pins, native assertions, publication and timeouts are unchanged.The earlier verify-pr background-case stall remains a separate issue. Required-file presence is enforced here; complete assertion validation is outside this task. Adding the workspace directory grant addresses a possible permission obstacle; the historical logs do not prove a permission denial caused the relocation.
Summary by Sourcery
Enforce the ordinary eval workspace and validate required result artifacts before reporting CI success.
Bug Fixes:
Enhancements:
CI:
Tests: