-
Notifications
You must be signed in to change notification settings - Fork 94
ci(#5509): add harness-eval static analysis for agent configurations #5510
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -143,3 +143,28 @@ jobs: | |
|
|
||
| - name: Run svelte-check | ||
| run: npm run check | ||
|
|
||
| harness-eval: | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [MEDIUM] Dropping the GitHub Action delivery and path-filter scoping requested by issue #5509 isn't explained Issue #5509 proposed shipping harness-eval "as a GitHub Action that can be added with a single workflow file" and running it "on every PR touching agent configurations" (implying scoped path filtering). This job instead uses a bare The disclosure itself is good (and was added in response to an earlier review comment on this thread), but the description still doesn't say why the Action route and path filtering were dropped, so it's unclear whether this was a deliberate, reviewed tradeoff or a silent scope reduction from the linked issue. Suggestion: add a sentence explaining the rationale (e.g. no official Action ships with a repo-standard SHA pin to depend on; the lint is fast/cheap enough that path-filtering isn't worth the added workflow complexity), so this reads as an intentional decision rather than an unexplained gap versus #5509. |
||
| # Lint agent configurations with harness-eval (advisory, not required for merge). | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 5 | ||
| steps: | ||
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | ||
|
|
||
| - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 | ||
| with: | ||
| python-version: "3.12" | ||
|
|
||
| - name: Install harness-eval | ||
| run: pip install -q "harness-eval==7.12.0" | ||
|
|
||
| # harness-gate runs only the validated gating-tier rules (>=97% precision, | ||
| # zero corpus false positives) and never loads LLM extras. The root baseline | ||
| # suppresses one pre-existing true positive so the job runs clean today and | ||
| # flags only new drift; the scaffold is clean and needs no baseline. | ||
| - name: Gate repo root | ||
| run: harness-eval harness-gate . --baseline .harness-eval-baseline.json | ||
|
|
||
| - name: Gate scaffold | ||
| if: always() | ||
| run: harness-eval harness-gate internal/scaffold/fullsend-repo | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [HIGH] PR description undercounts and mischaracterizes what the baseline suppresses The PR description states the baseline suppresses "two known security/no-credential-access false positives ... on legitimate sudo usage in install-openshell.sh and functional-tests.yml." Verified directly by reading I confirmed via a fresh harness-eval baseline run against the PR's actual merge tree that this broken-references entry is a real, reproducible finding (hash Suggestion: Update the PR description's "False-positive suppression" section to accurately state the baseline suppresses 6
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed. Updated the PR description's "False-positive suppression" section to itemize all 7 baseline entries: 6 security/no-credential-access across 3 files (install-openshell.sh, install-podman.sh x4, functional-tests.yml) plus the content/broken-references on skills/analyze-transcript/SKILL.md, with a rationale explaining it's a false positive on the templated path pattern .transcripts/run-/... |
||
| "version": "1.0", | ||
| "findings": [ | ||
| { | ||
| "rule_id": "frontmatter/format-valid", | ||
| "file": "skills/filing-issues/SKILL.md", | ||
| "message_hash": "df3375eb05be64c3" | ||
| } | ||
| ] | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[MEDIUM] New harness-eval job omits the repo's mandatory timeout-minutes
docs/contributing/ci-workflows.md's "Timeout policy" section states "Every non-reusable workflow job must set
timeout-minutes" (GitHub Actions otherwise defaults to a 6-hour timeout), and AGENTS.md's table lists that doc as required reading for "Adding or modifying GitHub Actions workflows under.github/workflows/" — exactly what this PR does. I confirmed via the fetched file that no job in the current lint.yml, including the newharness-evaljob added by this PR, setstimeout-minutes. This job does a networkpip installfrom a third-party git host followed by a filesystem/security scan — a plausible candidate for hanging (network stall, pathological scan) that the documented policy exists to guard against.Suggestion: Add
timeout-minutes: 5(or similar, based on the job's actual ~1s observed runtime plus headroom) to theharness-evaljob. The other pre-existing jobs in this file also lacktimeout-minutes(a pre-existing gap outside this PR's scope), but a new job is a reasonable place to start complying with the documented convention.