Skip to content

test(engine): make harness-submission-trigger coverage visible to Codecov#8454

Merged
loopover-orb[bot] merged 1 commit into
JSONbored:mainfrom
cleanjunc:feat/8346-harness-submission-trigger-codecov-twin
Jul 24, 2026
Merged

test(engine): make harness-submission-trigger coverage visible to Codecov#8454
loopover-orb[bot] merged 1 commit into
JSONbored:mainfrom
cleanjunc:feat/8346-harness-submission-trigger-codecov-twin

Conversation

@cleanjunc

Copy link
Copy Markdown
Contributor

Closes #8346

Summary

  • packages/loopover-engine/src/miner/harness-submission-trigger.ts (maintainer: wire the submission-gate trigger into the harness driving loop #2337) is the final gate before a real call site may build an open_pr local-write spec from a passing HandoffPacket. evaluateHarnessSubmissionTrigger checks a session-level circuit breaker FIRST (N consecutive gate-blocks pauses the run, never un-tripped by a later candidate), then delegates to the separately-tested shouldSubmit. It is fully exercised by the engine package's own node --test suite (packages/loopover-engine/test/harness-submission-trigger.test.ts), but that runner is not part of the root vitest run Codecov reads codecov/patch from, so it reports as ~0% covered despite being genuinely tested. Same blind spot as fix(ci): review-enrichment's real node:test coverage is invisible to Codecov (83 of 83 files effectively unmeasured) #6250.
  • Adds a root-level vitest twin, test/unit/harness-submission-trigger.test.ts, importing evaluateHarnessSubmissionTrigger and DEFAULT_MAX_CONSECUTIVE_GATE_BLOCKS via the engine barrel (../../packages/loopover-engine/src/index) and mirroring every scenario the package suite covers — following the sibling pattern in test/unit/calibration-dashboard.test.ts.
  • Adds a short note to the engine README's Codecov-mirror list documenting the root mirror. This README touch is deliberate and load-bearing — see "Why the README change" below.
  • No change to any file under packages/loopover-engine/src/** or packages/loopover-engine/test/**. Fixtures (HandoffPacket/MinerKillSwitchScope/verdict) are built exactly as the package suite does, so no real IO path is touched.

Covered, per the issue's requirements: the circuit-breaker boundary (consecutiveGateBlocks below the ceiling proceeds to shouldSubmit; at/above trips it with circuitBreakerTripped: true, allow: false, without consulting shouldSubmit — boundary case exactly maxConsecutiveGateBlocks), the ?? DEFAULT_MAX_CONSECUTIVE_GATE_BLOCKS fallback (default applied when omitted, and an explicit override honored — both arms), and a non-tripped candidate threading killSwitchScope/verdict/slopThreshold/mode into shouldSubmit and returning its allow/reasons verbatim (clean allow, kill-switch block, predicted-gate failure, slop-over-threshold, observe mode). Locally this brings the source to 100% line + branch under vitest.

Why the README change (please read before grading scope)

A pure test/**-only diff that touches no packages/loopover-engine/** path is classified by CI as a scoped, coverage-artifact-free run: each shard runs vitest --changed=origin/main --coverage.all=false, produces an empty coverage/lcov.info (no changed src/**), and skips uploading its coverage blob. With zero blobs, validate-tests-merge then fails with ENOENT … all-blob-reports, failing validate. Touching an engine-package path (extending the README's Codecov-mirror note) flips CI onto the full-coverage run, whose shards upload real blobs so the merge job passes — the same doc touch the merged twins for #8349/#8344/#8343 used. It adds zero src/** production lines, so codecov/patch still has nothing on this diff to grade.

Scope

  • The PR title follows type(scope): short summary Conventional Commit format.
  • Focused: a single new test file plus a directly-related, CI-load-bearing README note; no unrelated backend/UI/MCP/dep/deploy changes.
  • Follows CONTRIBUTING.md; does not reintroduce GitHub Pages, VitePress, site/, or CNAME.
  • I linked a currently open issue this PR resolves — Closes #8346.

Validation

  • git diff --check — clean.
  • npm run actionlint — N/A: no workflow / composite-action changes.
  • npm run typecheck — green (after building @loopover/engine, as the root test:ci sequence does before typecheck).
  • npm run test:coverage locally — the new file passes (9 tests) and reports 100% line + branch coverage of harness-submission-trigger.ts.
  • npm run test:workers — N/A: no worker code changed.
  • npm run build:mcp / npm run test:mcp-pack — N/A: no MCP changes.
  • npm run ui:openapi:check / npm run ui:lint / npm run ui:typecheck / npm run ui:build — N/A: no UI, API, or OpenAPI surface changed.
  • npm audit --audit-level=moderate — not run locally (sandbox audit endpoint returns a lockfile 400); no dependency changes, so it cannot affect the audit. CI runs it against a clean install.
  • New or changed behavior has unit tests — this PR is the added test coverage; no production behavior changed.

If any required check was skipped, explain why:

  • All skipped checks are N/A for a PR that adds one root-level vitest file plus a docs note, with no production, UI, MCP, API, workflow, or dependency changes.

Safety

  • No secrets, wallet details, hotkeys, coldkeys, PATs, private keys, trust scores, private rankings, or maintainer evidence are exposed.
  • Public GitHub text stays sanitized, low-noise, and implies no compensation or optimization tactics.
  • Auth, cookie, CORS, GitHub App, Cloudflare, or session changes include negative-path tests — N/A: none changed.
  • API/OpenAPI/MCP behavior is updated and tested where needed — N/A: none changed.
  • UI changes use live API data / real empty/error/loading states — N/A: no UI changes.
  • Public docs/changelogs updated where needed; CHANGELOG.md not edited (not a release-prep PR).

Notes

  • The test imports the primitive and its fixture types from the engine barrel, not a relative path into the source file, matching every existing sibling root-level engine test.
  • No behavior of harness-submission-trigger.ts (or shouldSubmit) was changed, and the package's own node --test suite was left untouched, as the issue requires.

…ecov

`packages/loopover-engine/src/miner/harness-submission-trigger.ts` (JSONbored#2337) is the
final gate before a real call site may build an `open_pr` local-write spec from a
passing `HandoffPacket`: `evaluateHarnessSubmissionTrigger` checks a session-level
circuit breaker FIRST (N consecutive gate-blocks pauses the run, never un-tripped
by a later candidate), then delegates to the separately-tested `shouldSubmit`. It
is fully exercised by the engine package's own `node --test` suite, but that runner
is not part of the root vitest run Codecov reads `codecov/patch` from, so it reports
as ~0% covered despite being genuinely tested (same blind spot as JSONbored#6250).

Add a root-level vitest twin importing `evaluateHarnessSubmissionTrigger` and
`DEFAULT_MAX_CONSECUTIVE_GATE_BLOCKS` via the engine barrel and mirroring every
scenario the package suite covers: the circuit-breaker boundary (below/at/above the
ceiling, with the tripped path never consulting shouldSubmit), the
`?? DEFAULT_MAX_CONSECUTIVE_GATE_BLOCKS` fallback (both arms), and the delegation
outcomes (clean allow, kill-switch, predicted-gate failure, slop-over-threshold,
observe mode). Fixtures built exactly as the package suite does; 100% line + branch
of the source locally.

Test-only: no change to any file under `packages/loopover-engine/src/**` or
`packages/loopover-engine/test/**`. Also extend the engine README's Codecov-mirror
note — the doc touch keeps this a full-coverage CI run so the sharded coverage blobs
reach the merge step (a root-`test/**`-only diff is otherwise treated as a scoped,
artifact-free run).

Closes JSONbored#8346
@cleanjunc
cleanjunc requested a review from JSONbored as a code owner July 24, 2026 13:48
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@codecov

codecov Bot commented Jul 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.47%. Comparing base (1dba0ec) to head (94fc282).
⚠️ Report is 15 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main    #8454       +/-   ##
===========================================
+ Coverage   79.34%   92.47%   +13.13%     
===========================================
  Files         791      791               
  Lines       79319    79320        +1     
  Branches    23952    23952               
===========================================
+ Hits        62933    73350    +10417     
+ Misses      13312     4839     -8473     
+ Partials     3074     1131     -1943     
Flag Coverage Δ
shard-1 55.09% <ø> (-2.67%) ⬇️
shard-2 49.56% <ø> (+1.90%) ⬆️
shard-3 56.74% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 253 files with indirect coverage changes

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 24, 2026
@loopover-orb

loopover-orb Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Tip

✅ LoopOver review result - approve/merge recommended

Review updated: 2026-07-24 14:27:19 UTC

2 files · 1 AI reviewer · no blockers · readiness 75/100 · CI green · clean

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
This is a pure test-only PR adding a root vitest mirror for `evaluateHarnessSubmissionTrigger` so Codecov's `codecov/patch` (which only reads root vitest) can see coverage that already exists via the engine package's own `node --test` suite. The new test file mirrors the circuit-breaker boundary, the `??` default-fallback both arms, and delegation to `shouldSubmit` (kill-switch, predicted-gate failure, slop threshold, observe mode), all via the existing engine barrel import with no source changes. The README update documenting the mirror is consistent with the stated pattern and matches prior entries (#8349, #8343) for the same blind spot (#6250).

Nits — 3 non-blocking
  • The long top-of-file comment in test/unit/harness-submission-trigger.test.ts:1-11 duplicates most of the PR description verbatim — consider trimming to a one-line pointer plus the issue number, consistent with terser sibling test headers.
  • test/unit/harness-submission-trigger.test.ts:37 asserts `changedPaths: ["src/upload.ts"]` in the fixture without ever exercising a scenario where changedPaths affects the decision — confirm this field is actually consumed by `shouldSubmit`/`evaluateHarnessSubmissionTrigger` or drop it if it's inert fixture noise.
  • Consider a short comment noting that `maxConsecutiveGateBlocks` is only passed explicitly in the boundary tests (test/unit/harness-submission-trigger.test.ts:31,36) versus omitted elsewhere, to make the intentional default-vs-override split clearer to future readers.

Decision drivers

  • ✅ Code review — No blockers (1 reviewer)
  • ✅ Gate result — Passing (No configured blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ Linked #8346
Related work ⚠️ 1 scoped overlap Top overlaps are listed below; lower-confidence bulk is hidden.
Change scope ❌ 8/20 High review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 53 registered-repo PR(s), 22 merged, 37 issue(s).
Contributor context ✅ Confirmed Gittensor contributor cleanjunc; Gittensor profile; 53 PR(s), 37 issue(s).
Improvement ℹ️ Insufficient signal risk: clean · value: insufficient-signal · LLM: moderate
Linked issue satisfaction

Addressed
The PR adds test/unit/harness-submission-trigger.test.ts importing evaluateHarnessSubmissionTrigger and DEFAULT_MAX_CONSECUTIVE_GATE_BLOCKS via the engine barrel, mirroring the package suite's circuit-breaker boundary (below/at threshold, without-shouldSubmit verification), the ?? default fallback (both arms), and delegation scenarios (kill switch, predicted-gate, slop, observe mode, verbatim pass

Review context
  • Author: cleanjunc
  • Role context: outside_contributor
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, JavaScript, Scala
  • Official Gittensor activity: 53 PR(s), 37 issue(s).
  • Related work: Titles/paths share 6 meaningful terms. (PR #8466)
Contributor next steps
  • Start here: Review top overlaps.
  • Then work through the remaining 3 steps in the Signals table above.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
🧪 Chat with LoopOver

Ask LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @loopover ask &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat &lt;question&gt; answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @loopover mention with a real question is routed to the closest matching read-only command automatically — no exact syntax required.

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.

  • Re-run LoopOver review

@loopover-orb loopover-orb 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.

LoopOver approves — the gate is satisfied and CI is green.

@loopover-orb
loopover-orb Bot merged commit 4119527 into JSONbored:main Jul 24, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

miner/harness-submission-trigger.ts's circuit-breaker logic is invisible to Codecov

1 participant