Skip to content

Fix cron jobs stuck in "expired" when a run is interrupted mid-flight#48502

Open
juan-fdz-hawa wants to merge 1 commit into
mainfrom
48497-cron-jobs-stuck-in-expired-when-a-run-is-interrupted-mid-flight
Open

Fix cron jobs stuck in "expired" when a run is interrupted mid-flight#48502
juan-fdz-hawa wants to merge 1 commit into
mainfrom
48497-cron-jobs-stuck-in-expired-when-a-run-is-interrupted-mid-flight

Conversation

@juan-fdz-hawa

@juan-fdz-hawa juan-fdz-hawa commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Related issue: Fixes #48497

When a cron run's context was cancelled mid-flight (e.g. the instance received SIGTERM during graceful shutdown), the stats row was left "pending" because the terminal-status write failed on the cancelled context. CleanupCronStats would later reap it to "expired", hiding the fact that the run was interrupted and discarding the captured job errors.

Record the terminal status on a context detached from cancellation (context.WithoutCancel with a bounded timeout) so an interrupted run persists its outcome. The run is marked "canceled" only when the context was cancelled AND a job actually reported an error, so a run whose jobs all finished cleanly is still "completed" even if cancellation merely raced the end of the run.

Checklist for submitter

If some of the following don't apply, delete the relevant line.

  • Changes file added for user-visible changes in changes/, orbit/changes/ or ee/fleetd-chrome/changes.
    See Changes files for more information.

Testing

  • Added/updated automated tests
  • QA'd all new/changed functionality manually

Summary by CodeRabbit

  • Bug Fixes
    • Interrupted cron runs now move to a terminal canceled state instead of lingering as “expired”.
    • Run status is computed more accurately, recording canceled when cancellation occurs alongside job errors.
    • Any related job errors are preserved when persisting the final run status.
    • Final cron status persistence is more resilient when the scheduler is stopping.
  • Tests
    • Added coverage for completed vs. cancellation paths, including triggered-run behavior and error persistence.

@juan-fdz-hawa

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 54c03dec-b68d-48f0-a78f-a5950c7fa5a3

📥 Commits

Reviewing files that changed from the base of the PR and between a761297 and 8cfd1f0.

📒 Files selected for processing (3)
  • changes/48497-cron-interrupted-run-status
  • server/service/schedule/schedule.go
  • server/service/schedule/schedule_test.go
✅ Files skipped from review due to trivial changes (1)
  • changes/48497-cron-interrupted-run-status
🚧 Files skipped from review as they are similar to previous changes (2)
  • server/service/schedule/schedule.go
  • server/service/schedule/schedule_test.go

Walkthrough

A new terminalStatusWriteTimeout constant is added in schedule.go. runWithStats now records canceled when the run context is canceled and job errors exist, otherwise completed, and writes the final stats through a detached context with a timeout. The test file adds a context-aware stats store mock and table-driven coverage for canceled and completed scenarios. A changelog entry is updated to describe the fix.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the core fix for interrupted cron runs and their terminal status handling.
Description check ✅ Passed The description includes the linked issue, summarizes the fix, and fills the relevant testing and changes-file checklist items.
Linked Issues check ✅ Passed The changes address #48497 by persisting terminal status on cancellation and preserving job errors, with tests covering the behavior.
Out of Scope Changes check ✅ Passed The PR stays focused on the cron interruption fix, its change log entry, and tests, with no obvious unrelated changes.
✨ 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 48497-cron-jobs-stuck-in-expired-when-a-run-is-interrupted-mid-flight

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.

@juan-fdz-hawa juan-fdz-hawa force-pushed the 48497-cron-jobs-stuck-in-expired-when-a-run-is-interrupted-mid-flight branch from 7f81a30 to a761297 Compare June 30, 2026 16:46
@juan-fdz-hawa juan-fdz-hawa marked this pull request as ready for review June 30, 2026 16:46
@juan-fdz-hawa juan-fdz-hawa requested a review from a team as a code owner June 30, 2026 16:46

@claude claude 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.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 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 `@server/service/schedule/schedule_test.go`:
- Line 1062: The current test assertion around runWithStats only verifies that
expected persisted error keys are present, but it does not fail when extra
errors are stored. Tighten the contract in the schedule tests by asserting an
exact match for the persisted error key set instead of using subset/presence
checks, so the interrupted-run case catches unintended entries like additional
errors from runAllJobs. Update the assertions in the affected schedule test
cases that use wantErrorKeys to compare the full persisted error collection
exactly.
🪄 Autofix (Beta)

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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2102eaa6-8afd-425a-93db-55ac53c49dae

📥 Commits

Reviewing files that changed from the base of the PR and between 7f81a30 and a761297.

📒 Files selected for processing (3)
  • changes/48497-cron-interrupted-run-status
  • server/service/schedule/schedule.go
  • server/service/schedule/schedule_test.go
✅ Files skipped from review due to trivial changes (1)
  • changes/48497-cron-interrupted-run-status
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/service/schedule/schedule.go

Comment thread server/service/schedule/schedule_test.go Outdated
Fixes #48497

When a cron run's context was cancelled mid-flight (e.g. the instance
received SIGTERM during graceful shutdown), the stats row was left
"pending" because the terminal-status write failed on the cancelled
context. CleanupCronStats would later reap it to "expired", hiding the
fact that the run was interrupted and discarding the captured job errors.

Record the terminal status on a context detached from cancellation
(context.WithoutCancel with a bounded timeout) so an interrupted run
persists its outcome. The run is marked "canceled" only when the context
was cancelled AND a job actually reported an error, so a run whose jobs
all finished cleanly is still "completed" even if cancellation merely
raced the end of the run.
@juan-fdz-hawa juan-fdz-hawa force-pushed the 48497-cron-jobs-stuck-in-expired-when-a-run-is-interrupted-mid-flight branch from a761297 to 8cfd1f0 Compare June 30, 2026 16:51
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: test-go (vuln, mysql:8.0.44) / test

Failed stage: Run Go Tests [❌]

Failed test name: TestTranslateCPEToCVE

Failure summary:

  • The Go test suite failed in package github.com/fleetdm/fleet/v4/server/vulnerabilities/nvd after
    ~1200s.
  • The specific failing test is TestTranslateCPEToCVE, which attempts to download an NVD CVE feed
    artifact and repeatedly gets a 404 Not Found.
  • The missing artifact URL is
    https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta,
    so the test fails with download nvd cve feed: ... unexpected http response ... (404 Not Found).
Relevant error logs:
1:  Runner name: 'ubuntu-8core-1000961098'
2:  Runner group name: 'default larger runners'
...

958:  �[36;1mattempt=1�[0m
959:  �[36;1m�[0m
960:  �[36;1mwhile [ $attempt -le $max_attempts ]; do�[0m
961:  �[36;1m  echo "Attempt $attempt of $max_attempts"�[0m
962:  �[36;1m�[0m
963:  �[36;1m  # Try to connect to MySQL�[0m
964:  �[36;1m  if wait_for_mysql "mysql_test"; then�[0m
965:  �[36;1m    # If MySQL is ready, try to connect to MySQL replica�[0m
966:  �[36;1m    if wait_for_mysql "mysql_replica_test"; then�[0m
967:  �[36;1m      # Both are ready, we're done�[0m
968:  �[36;1m      echo "All MySQL connections successful"�[0m
969:  �[36;1m      exit 0�[0m
970:  �[36;1m    fi�[0m
971:  �[36;1m  fi�[0m
972:  �[36;1m�[0m
973:  �[36;1m  # If we get here, at least one connection failed�[0m
974:  �[36;1m  echo "Failed to connect to MySQL on attempt $attempt"�[0m
975:  �[36;1m�[0m
976:  �[36;1m  if [ $attempt -lt $max_attempts ]; then�[0m
977:  �[36;1m    echo "Restarting containers and trying again..."�[0m
978:  �[36;1m    restart_containers�[0m
979:  �[36;1m  else�[0m
980:  �[36;1m    echo "Maximum attempts reached. Failing the job."�[0m
981:  �[36;1m    exit 1�[0m
...

1105:  �[32m✓�[0m Is server core (0.00s)
1106:  �[32m✓�[0m Matches (0.00s)
1107:  �[32m✓�[0m Matches from differect arch (0.00s)
1108:  �[32m✓�[0m Matches from differect products (0.00s)
1109:  �[32m✓�[0m Matches operating system (0.00s)
1110:  �[32m✓�[0m Matches same product but for different architecture (0.00s)
1111:  �[32m✓�[0m Matches same product one with no architecture (0.00s)
1112:  �[32m✓�[0m Matches same product same arch (0.00s)
1113:  �[32m✓�[0m New product from OS (0.00s)
1114:  �[32m✓�[0m Product has display version (0.00s)
1115:  �[32m✓�[0m Security bulletin (0.00s)
1116:  �[32m✓�[0m Security bulletin # merge (0.00s)
1117:  �[32m✓�[0m Security bulletin # merge . products (0.00s)
1118:  �[32m✓�[0m Security bulletin # merge . vendor fixes (0.00s)
1119:  �[32m✓�[0m Security bulletin # merge . vulnerabilities (0.00s)
1120:  �[32m✓�[0m Security bulletin # merge fails if product names don't match (0.00s)
1121:  �[32m✓�[0m Security bulletin # merge with empty bulletins (0.00s)
1122:  �[32m✓�[0m Security bulletin # unmarshal JSON (0.00s)
1123:  �[32m✓�[0m Security bulletin # unmarshal JSON accepts new vulnerabilities key (0.00s)
1124:  �[32m✓�[0m Security bulletin # unmarshal JSON accepts old misspelled vulnerabities key (0.00s)
1125:  �[32m✓�[0m Security bulletin # unmarshal JSON marshal uses correct spelling (0.00s)
1126:  github.com/fleetdm/fleet/v4/server/vulnerabilities/goval_dictionary:
1127:  �[32m✓�[0m Database (0.00s)
1128:  �[32m✓�[0m Database close releases file handle (0.04s)
1129:  �[32m✓�[0m Database fixed version (0.00s)
1130:  �[32m✓�[0m Database multiple packages, fixed version (0.00s)
1131:  �[32m✓�[0m Database multiple packages, multiple vulnerabilities (0.00s)
1132:  �[32m✓�[0m Database newer than fixed version (0.00s)
1133:  �[32m✓�[0m Database non-matching architecture (0.00s)
1134:  �[32m✓�[0m Database non-matching package name (0.00s)
1135:  �[32m✓�[0m Database older than fixed version (0.00s)
1136:  �[32m✓�[0m Database verify returns no errors (0.00s)
1137:  �[32m✓�[0m Sync (0.00s)
1138:  �[32m✓�[0m Sync #what to download (0.00s)
1139:  �[32m✓�[0m Verify (0.00s)
1140:  �[32m✓�[0m Verify verify alerts of error (0.00s)
1141:  github.com/fleetdm/fleet/v4/server/vulnerabilities/msrc:
...

1172:  �[32m✓�[0m Parser (0.28s)
1173:  �[32m✓�[0m Parser map to security bulletins (0.00s)
1174:  �[32m✓�[0m Parser map to security bulletins each bulletin should have the right products (0.00s)
1175:  �[32m✓�[0m Parser map to security bulletins each bulletin should have the right vulnerabilities (0.00s)
1176:  �[32m✓�[0m Parser map to security bulletins should have one bulletin per product (0.00s)
1177:  �[32m✓�[0m Parser map to security bulletins should map the vendor fixes entries correctly (0.00s)
1178:  �[32m✓�[0m Parser map to security bulletins should map the vulnerability entries correctly (0.00s)
1179:  �[32m✓�[0m Parser parse XML (0.15s)
1180:  �[32m✓�[0m Parser parse XML only CVEs for windows products are included (0.00s)
1181:  �[32m✓�[0m Parser parse XML only windows products are included (0.00s)
1182:  �[32m✓�[0m Parser parse XML scores are parsed correctly (0.00s)
1183:  �[32m✓�[0m Parser parse XML should include windows server 2025 from 202 6- feb feed (0.15s)
1184:  �[32m✓�[0m Parser parse XML the remediations are parsed correctly (0.00s)
1185:  �[32m✓�[0m Parser parse XML the revision history is parsed correctly (0.00s)
1186:  �[32m✓�[0m Parser parse feed (0.00s)
1187:  �[32m✓�[0m Parser parse feed errors out if file does not exists (0.00s)
1188:  �[32m✓�[0m Sync (0.00s)
...

1325:  �[32m✓�[0m Extract ubuntu version future version 2 5.04 (0.00s)
1326:  �[32m✓�[0m Extract ubuntu version interim release 2 3.10 (0.00s)
1327:  �[32m✓�[0m Extract ubuntu version interim release 2 4.10 with patch (0.00s)
1328:  �[32m✓�[0m Extract ubuntu version invalid version - single digit (0.00s)
1329:  �[32m✓�[0m Extract ubuntu version ubuntu 1 6.04 with extra spaces (0.00s)
1330:  �[32m✓�[0m Extract ubuntu version ubuntu 1 8.04 (0.00s)
1331:  �[32m✓�[0m Extract ubuntu version ubuntu 2 0.04 LTS (0.00s)
1332:  �[32m✓�[0m Extract ubuntu version ubuntu 2 2.04 LTS (0.00s)
1333:  �[32m✓�[0m Extract ubuntu version ubuntu 2 4.04 no LTS suffix (0.00s)
1334:  �[32m✓�[0m Extract ubuntu version version with codename suffix (0.00s)
1335:  �[32m✓�[0m Extract ubuntu version very old version 1 4.04 (0.00s)
1336:  �[32m✓�[0m Find latest OSV artifact for version (0.00s)
1337:  �[32m✓�[0m Find latest OSV artifact for version finds latest 1 8.04 artifact (0.00s)
1338:  �[32m✓�[0m Find latest OSV artifact for version finds latest 2 0.04 artifact (0.00s)
1339:  �[32m✓�[0m Find latest OSV artifact for version finds latest 2 2.04 artifact (0.00s)
1340:  �[32m✓�[0m Find latest OSV artifact for version returns error for non-existent version (0.00s)
1341:  �[32m✓�[0m Get needed RHEL versions (0.00s)
...

1413:  �[32m✓�[0m Normalize kernel version generic 6 4k kernel (0.00s)
1414:  �[32m✓�[0m Normalize kernel version generic kernel (0.00s)
1415:  �[32m✓�[0m Normalize kernel version kernel with only one part (0.00s)
1416:  �[32m✓�[0m Normalize kernel version lowlatency kernel (0.00s)
1417:  �[32m✓�[0m OSV filename (0.00s)
1418:  �[32m✓�[0m OSV filename 1804 (0.00s)
1419:  �[32m✓�[0m OSV filename 2004 (0.00s)
1420:  �[32m✓�[0m OSV filename 2204 (0.00s)
1421:  �[32m✓�[0m RHELOSV filename (0.00s)
1422:  �[32m✓�[0m RHELOSV filename 10 (0.00s)
1423:  �[32m✓�[0m RHELOSV filename 8 (0.00s)
1424:  �[32m✓�[0m RHELOSV filename 9 (0.00s)
1425:  �[32m✓�[0m Release date from assets (0.00s)
1426:  �[32m✓�[0m Remove old OSV artifacts (0.00s)
1427:  �[32m✓�[0m Remove old OSV artifacts date boundary race (0.00s)
1428:  �[32m✓�[0m Remove old OSV artifacts preserves failed versions (0.00s)
1429:  �[32m✓�[0m Remove old OSV artifacts with skipped versions (0.00s)
1430:  �[32m✓�[0m Remove old RHELOSV artifacts (0.00s)
1431:  �[32m✓�[0m Sync OSV checksum match (0.00s)
1432:  �[32m✓�[0m Sync OSV fault tolerance (0.00s)
1433:  �[32m✓�[0m Sync OSV partial failure not returned as error (0.00s)
1434:  �[32m✓�[0m Version from asset name (0.00s)
...

1467:  �[32m✓�[0m CVE use existing sync cve-2. 0 .xml.gz (0.02s)
1468:  �[32m✓�[0m CVE use existing sync cve-2. 0 .xml.zip (0.01s)
1469:  �[33m∅�[0m End to end (0.00s)
1470:  �[32m✓�[0m Response not OK (0.00s)
1471:  github.com/fleetdm/fleet/v4/server/vulnerabilities/oval/input:
1472:  github.com/fleetdm/fleet/v4/server/vulnerabilities/oval/parsed:
1473:  �[32m✓�[0m Dpkg info test eval no host list (0.00s)
1474:  �[32m✓�[0m Dpkg info test eval no host list # eval (0.00s)
1475:  �[32m✓�[0m Dpkg info test eval no host list # eval test matches n objects (0.00s)
1476:  �[32m✓�[0m Dpkg info test eval no host list # eval test matches n states (0.00s)
1477:  �[32m✓�[0m Dpkg info test eval no host list # eval with no packages (0.00s)
1478:  �[32m✓�[0m Eval (0.00s)
1479:  �[32m✓�[0m Eval alt pattern match (0.00s)
1480:  �[32m✓�[0m Eval equal (0.00s)
1481:  �[32m✓�[0m Eval greater than (0.00s)
1482:  �[32m✓�[0m Eval higher version fails pattern match (0.00s)
1483:  �[32m✓�[0m Eval kernel (0.00s)
1484:  �[32m✓�[0m Eval less than (0.00s)
1485:  �[32m✓�[0m Eval lower version fails pattern match (0.00s)
1486:  �[32m✓�[0m Eval suffix doesn't match (0.00s)
...

1498:  �[32m✓�[0m Object info state # eval OS version name (0.00s)
1499:  �[32m✓�[0m Object info state # eval OS version version (0.00s)
1500:  �[32m✓�[0m Object info state # eval software (0.00s)
1501:  �[32m✓�[0m Object info state # eval software arch (0.00s)
1502:  �[32m✓�[0m Object info state # eval software evr (0.00s)
1503:  �[32m✓�[0m Object info state # eval software name (0.00s)
1504:  �[32m✓�[0m Object info state # eval software release (0.00s)
1505:  �[32m✓�[0m Object info state # eval software signature key id (0.00s)
1506:  �[32m✓�[0m Object info state # eval software version (0.00s)
1507:  �[32m✓�[0m Object match type (0.00s)
1508:  �[32m✓�[0m Object match type # eval (0.00s)
1509:  �[32m✓�[0m Object match type new object match type (0.00s)
1510:  �[32m✓�[0m Object state evr string (0.00s)
1511:  �[32m✓�[0m Object state evr string # eval (0.00s)
1512:  �[32m✓�[0m Object state evr string # eval evaluates an evr string (0.00s)
1513:  �[32m✓�[0m Object state evr string # eval it errors out if operation can not be computed (0.00s)
1514:  �[32m✓�[0m Object state simple value (0.00s)
1515:  �[32m✓�[0m Object state simple value # eval (0.00s)
1516:  �[32m✓�[0m Object state simple value # eval compares simple data types (0.00s)
1517:  �[32m✓�[0m Object state simple value # eval compares simple data types booleans (0.00s)
1518:  �[32m✓�[0m Object state simple value # eval compares simple data types floats (0.00s)
1519:  �[32m✓�[0m Object state simple value # eval compares simple data types ints (0.00s)
1520:  �[32m✓�[0m Object state simple value # eval compares simple data types strings (0.00s)
1521:  �[32m✓�[0m Object state simple value # eval it errors out if complex type used (0.00s)
1522:  �[32m✓�[0m Object state simple value #unpack (0.00s)
1523:  �[32m✓�[0m Object state simple value new object state simple value (0.00s)
1524:  �[32m✓�[0m Object state string (0.00s)
1525:  �[32m✓�[0m Object state string # eval (0.00s)
1526:  �[32m✓�[0m Object state string # eval it errors out if operation can not be computed (0.00s)
1527:  �[32m✓�[0m Object state string # eval it errors out if regexp can not be parsed (0.00s)
1528:  �[32m✓�[0m Object state string # eval it evaluates string values (0.00s)
...

1559:  �[32m✓�[0m Vulns delta existing differ from found (0.00s)
1560:  �[32m✓�[0m Vulns delta existing match found (0.00s)
1561:  �[32m✓�[0m Vulns delta no existing vulnerabilities (0.00s)
1562:  �[32m✓�[0m Vulns delta nothing found but vulns exist (0.00s)
1563:  github.com/fleetdm/fleet/v4/server/vulnerabilities/nvd/tools/providers/lib/client:
1564:  github.com/fleetdm/fleet/v4/server/vulnerabilities/nvd/tools/providers/lib/rate:
1565:  github.com/fleetdm/fleet/v4/server/vulnerabilities/macoffice:
1566:  �[32m✓�[0m Analyzer (0.00s)
1567:  �[32m✓�[0m Analyzer analyze (0.00s)
1568:  �[32m✓�[0m Analyzer analyze when no release notes on path (0.00s)
1569:  �[32m✓�[0m Analyzer analyze when release notes contain no valid security updates (0.00s)
1570:  �[32m✓�[0m Analyzer analyze when using wrong path (0.00s)
1571:  �[32m✓�[0m Analyzer collect vulnerabilities (0.00s)
1572:  �[32m✓�[0m Analyzer collect vulnerabilities no release notes (0.00s)
1573:  �[32m✓�[0m Analyzer get stored vulnerabilities (0.00s)
1574:  �[32m✓�[0m Analyzer get stored vulnerabilities on error (0.00s)
1575:  �[32m✓�[0m Analyzer latest release notes (0.00s)
1576:  �[32m✓�[0m Analyzer latest release notes returns release notes in order (0.00s)
1577:  �[32m✓�[0m Analyzer latest release notes when the JSON file is invalid (0.00s)
1578:  �[32m✓�[0m Analyzer latest release notes when vuln path does not exists (0.00s)
1579:  �[32m✓�[0m Analyzer latest release notes when vuln path exists (0.00s)
1580:  �[32m✓�[0m Analyzer update vulns in DB (0.00s)
1581:  �[32m✓�[0m Analyzer update vulns in DB on error when deleting vulns (0.00s)
1582:  �[32m✓�[0m Analyzer update vulns in DB on error when inserting vulns (0.00s)
1583:  �[32m✓�[0m Build number (0.00s)
...

1589:  �[32m✓�[0m Integrations parse release HTML (0.10s)
1590:  �[32m✓�[0m Integrations parse release HTML should parse dates (0.00s)
1591:  �[32m✓�[0m Integrations parse release HTML should parse release versions (0.00s)
1592:  �[32m✓�[0m Integrations parse release HTML should parse security updates (0.00s)
1593:  �[32m✓�[0m Integrations sync (0.59s)
1594:  �[32m✓�[0m Release note (0.00s)
1595:  �[32m✓�[0m Release note # cmp version (0.00s)
1596:  �[32m✓�[0m Release note # cmp version when release version is newer than (0.00s)
1597:  �[32m✓�[0m Release note # cmp version when release version is older than (0.00s)
1598:  �[32m✓�[0m Release note # cmp version when the same (0.00s)
1599:  �[32m✓�[0m Release note # collect vulnerabilities (0.00s)
1600:  �[32m✓�[0m Release note # office product from bundle id (0.00s)
1601:  �[32m✓�[0m Short version format (0.00s)
1602:  �[32m✓�[0m Sync (0.00s)
1603:  �[32m✓�[0m Sync #sync (0.00s)
1604:  �[32m✓�[0m Sync #sync on FS error (0.00s)
1605:  �[32m✓�[0m Sync #sync on GH error (0.00s)
1606:  �[32m✓�[0m Sync #sync on error when deleting (0.00s)
1607:  �[32m✓�[0m Sync #sync on error when downloading GH asset (0.00s)
1608:  �[32m✓�[0m Sync #sync removes multiple out of date copies (0.00s)
...

1617:  �[32m✓�[0m Fetch vuln check download URL with retries (0.02s)
1618:  �[32m✓�[0m Store CVEs legacy format (12.91s)
1619:  �[32m✓�[0m Store CVEs legacy format 2023 (12.91s)
1620:  github.com/fleetdm/fleet/v4/server/vulnerabilities/oval:
1621:  �[32m✓�[0m Oval analyzer (0.00s)
1622:  �[32m✓�[0m Oval analyzer #load (0.00s)
1623:  �[32m✓�[0m Oval analyzer #load invalid vuln path (0.00s)
1624:  �[32m✓�[0m Oval analyzer #load rejects empty definition file (0.00s)
1625:  �[32m✓�[0m Oval analyzer analyzing RHEL software (13.14s)
1626:  �[32m✓�[0m Oval analyzer analyzing ubuntu software (8.30s)
1627:  �[32m✓�[0m Oval download definitions matching host info (0.00s)
1628:  �[32m✓�[0m Oval download definitions platform not found (0.00s)
1629:  �[32m✓�[0m Oval mapper (0.00s)
1630:  �[32m✓�[0m Oval mapper #extract id (0.00s)
1631:  �[32m✓�[0m Oval mapper #map criteria (0.00s)
1632:  �[32m✓�[0m Oval mapper #map criteria errors out if id can not be parsed on any criterion (0.00s)
1633:  �[32m✓�[0m Oval mapper #map criteria errors out if no criteriums or nested criterias (0.00s)
1634:  �[32m✓�[0m Oval mapper #map criteria maps criteriums (0.00s)
1635:  �[32m✓�[0m Oval mapper #map criteria maps nested criterias (0.00s)
1636:  �[32m✓�[0m Oval mapper #map definition (0.00s)
1637:  �[32m✓�[0m Oval mapper #map definition errors out if no vulnerabilities (0.00s)
1638:  �[32m✓�[0m Oval mapper #map dpkg info state (0.00s)
1639:  �[32m✓�[0m Oval mapper #map dpkg info state errors out if one of non-supported state information is provided (0.00s)
1640:  �[32m✓�[0m Oval mapper #map dpkg info test (0.00s)
1641:  �[32m✓�[0m Oval mapper #map dpkg info test errors out if id can not be parsed (0.00s)
1642:  �[32m✓�[0m Oval mapper #map dpkg info test maps a dpkg info test XML (0.00s)
1643:  �[32m✓�[0m Oval mapper #map package info test object (0.00s)
1644:  �[32m✓�[0m Oval mapper #map package info test object name defined in var ref (0.00s)
1645:  �[32m✓�[0m Oval mapper #map package info test object name defined inline (0.00s)
1646:  �[32m✓�[0m Oval mapper #map package info test object name not defined inline nor using a variable ref (0.00s)
1647:  �[32m✓�[0m Oval mapper #map rpm info state (0.00s)
1648:  �[32m✓�[0m Oval mapper #map rpm info state errors out if not supported state is provided (0.00s)
1649:  �[32m✓�[0m Oval mapper #map rpm info state maps a rpm info state XML (0.00s)
1650:  �[32m✓�[0m Oval mapper #map rpm info state maps the operator, if any (0.00s)
1651:  �[32m✓�[0m Oval mapper #map rpm info test (0.00s)
1652:  �[32m✓�[0m Oval mapper #map rpm info test errors out if id can not be parsed (0.00s)
1653:  �[32m✓�[0m Oval mapper #map rpm info test maps a rpm info test XML (0.00s)
1654:  �[32m✓�[0m Oval mapper #map rpm verify file object (0.00s)
1655:  �[32m✓�[0m Oval mapper #map rpm verify file object errors out if invalid children provided (0.00s)
1656:  �[32m✓�[0m Oval mapper #map rpm verify file object maps to a filepath (0.00s)
1657:  �[32m✓�[0m Oval mapper #map rpm verify file state (0.00s)
1658:  �[32m✓�[0m Oval mapper #map rpm verify file state errors out if not supported state is provided (0.00s)
1659:  �[32m✓�[0m Oval mapper #map rpm verify file state maps a rpm verify file state XML (0.00s)
...

1735:  �[32m✓�[0m Integration check version unknown version returns no vulnerabilities (0.00s)
1736:  �[32m✓�[0m Integration check version version not in bulletin returns empty (0.00s)
1737:  �[32m✓�[0m Parse office version (0.00s)
1738:  �[32m✓�[0m Parse office version invalid version - no prefix (0.00s)
1739:  �[32m✓�[0m Parse office version invalid version - too few parts (0.00s)
1740:  �[32m✓�[0m Parse office version invalid version - wrong prefix (0.00s)
1741:  �[32m✓�[0m Parse office version valid version (0.00s)
1742:  �[32m✓�[0m Parse security markdown (0.00s)
1743:  �[32m✓�[0m Parse security markdown keeps minimum build suffix for same version (0.00s)
1744:  �[32m✓�[0m Parse security markdown parses LTSC versions (0.00s)
1745:  �[32m✓�[0m Parse security markdown parses multiple releases (0.00s)
1746:  �[32m✓�[0m Parse security markdown parses single release with multiple versions (0.00s)
1747:  �[32m✓�[0m Parse security markdown skips releases without CVEs (0.00s)
1748:  �[32m✓�[0m Parse security markdown skips retail versions (0.00s)
1749:  �[32m✓�[0m Sync bulletin (0.00s)
1750:  �[32m✓�[0m Sync bulletin on FS error (0.00s)
1751:  �[32m✓�[0m Sync bulletin on GH error (0.00s)
1752:  �[32m✓�[0m Sync bulletin on error when deleting (0.00s)
1753:  �[32m✓�[0m Sync bulletin on error when downloading GH asset (0.00s)
1754:  �[32m✓�[0m Sync bulletin removes multiple out of date copies (0.00s)
...

1761:  �[32m✓�[0m FS client (0.00s)
1762:  �[32m✓�[0m FS client #MSRC bulletins (0.00s)
1763:  �[32m✓�[0m FS client #MSRC bulletins directory does not exists (0.00s)
1764:  �[32m✓�[0m FS client #MSRC bulletins returns a list of file matching the MSRC file prefix (0.00s)
1765:  �[32m✓�[0m FS client delete (0.00s)
1766:  �[32m✓�[0m FS client delete file does not exists (0.00s)
1767:  �[32m✓�[0m FS client mac office release notes (0.00s)
1768:  �[32m✓�[0m FS client mac office release notes directory does not exists (0.00s)
1769:  �[32m✓�[0m FS client mac office release notes returns a list of file matching the mac office file prefix (0.00s)
1770:  �[32m✓�[0m FS client mac office release notes when files contain the wrong date format (0.00s)
1771:  �[32m✓�[0m Integrations github client (269.96s)
1772:  �[32m✓�[0m Integrations github client # download (269.96s)
1773:  �[32m✓�[0m Integrations github client # download with invalid URL (269.95s)
1774:  �[32m✓�[0m Integrations github client #MSRC bulletins (0.00s)
1775:  �[32m✓�[0m Integrations github client mac office release notes (0.00s)
1776:  �[32m✓�[0m Integrations github client mac office release notes on error (0.00s)
1777:  �[32m✓�[0m Integrations github client mac office release notes with HTTP error code (0.00s)
1778:  �[32m✓�[0m Integrations github client mac office release notes with a single release note asset (0.00s)
...

1905:  �[32m✓�[0m Syncs CVE from URL (0.00s)
1906:  �[32m✓�[0m Translate (0.00s)
1907:  �[32m✓�[0m Translate match on bundle identifier (0.00s)
1908:  �[32m✓�[0m Translate match on name and source (0.00s)
1909:  �[32m✓�[0m Translate match with regex (0.00s)
1910:  �[32m✓�[0m Translate match with regex not matching (0.00s)
1911:  �[32m✓�[0m Translate no match (0.00s)
1912:  �[32m✓�[0m Translate software to CPE (0.03s)
1913:  �[32m✓�[0m Translate software to CPE ignore empty version (0.03s)
1914:  �[32m✓�[0m Variations (0.00s)
1915:  === �[33mSkipped�[0m
1916:  === �[33mSKIP�[0m: server/vulnerabilities/nvd/tools/providers/nvd TestEndToEnd (0.00s)
1917:  e2e_test.go:45: e2e tests not enabled
1918:  === �[33mSKIP�[0m: server/vulnerabilities/vulntest TestGenerateVulnFixtures (0.00s)
1919:  gen_fixture_test.go:123: set GENERATE_FIXTURES=1 to run this test
1920:  === �[31mFailed�[0m
1921:  === �[31mFAIL�[0m: server/vulnerabilities/nvd  (0.00s)
...

2088:  /opt/hostedtoolcache/go/1.26.4/x64/src/io/io.go:354
2089:  net/http.http2readFrameHeader({0xeaae4a8e824, 0x9, 0xeaa000000a7?}, {0x13fe480?, 0xeaae4843b60?})
2090:  /opt/hostedtoolcache/go/1.26.4/x64/src/net/http/h2_bundle.go:1805 +0x65
2091:  net/http.(*http2Framer).ReadFrameHeader(0xeaae4a8e7e0)
2092:  /opt/hostedtoolcache/go/1.26.4/x64/src/net/http/h2_bundle.go:2071 +0x6b
2093:  net/http.(*http2Framer).ReadFrame(0xeaae4a8e7e0)
2094:  /opt/hostedtoolcache/go/1.26.4/x64/src/net/http/h2_bundle.go:2130 +0x18
2095:  net/http.(*http2clientConnReadLoop).run(0xeaae52abfa8)
2096:  /opt/hostedtoolcache/go/1.26.4/x64/src/net/http/h2_bundle.go:9550 +0xca
2097:  net/http.(*http2ClientConn).readLoop(0xeaae550e380)
2098:  /opt/hostedtoolcache/go/1.26.4/x64/src/net/http/h2_bundle.go:9419 +0x52
2099:  created by net/http.(*http2Transport).newClientConn in goroutine 9640
2100:  /opt/hostedtoolcache/go/1.26.4/x64/src/net/http/h2_bundle.go:8171 +0xda5
2101:  FAIL	github.com/fleetdm/fleet/v4/server/vulnerabilities/nvd	1200.141s
2102:  === �[31mFAIL�[0m: server/vulnerabilities/nvd TestTranslateCPEToCVE (unknown)
2103:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2104:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2105:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2106:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2107:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2108:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2109:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2110:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2111:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2112:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2113:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2114:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2115:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2116:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2117:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2118:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2119:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2120:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n\n<!DOCTYPE html>\n<html\n  lang=\"en\"\n  \n  data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n  data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n  \n  >\n\n\n\n\n  <head>\n    <meta charset=\"utf-8\">\n  <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n  <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n  <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n  <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n  <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n  <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n      <link crossorigin=\"anonymous\" rel=\"preload\" as=\"script\" href=\"https://github.githubassets.com/assets/global-banner-disable-f33ea31fa5ffa501.js\" />\n\n  <link rel=\"preload\" href=\"https://github.githubassets.com/assets/MonaSansVF-wdth-wght-opsz-902d64c7ad02.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\n\n\n  <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-4fded0090af0ad58.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-cf8e26bc17e62ebc.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-3a437477a570cc40.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-39b6c209db5491c9.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-3822234d6c03b00b.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-33857254a8064bf7.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-06381ff23d863842.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-9023e6605402defb.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-37023bf69d8e0e34.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-486bd43e01a2c0ec.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-838ba2a5070c5b09.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-2aa7245dc545d61f.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-29ef2eb185e7de1c.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymo"
2121:  nettest.go:84: TestTranslateCPEToCVE: retrying error: download nvd cve feed: download nvd cve feed: 1 synchronisation error:
2122:  unexpected http response from "https://github.com/fleetdm/vulnerabilities/releases/download/cve-202606291945/nvdcve-1.1-2021.meta" ("404 Not Found"): "\n\n\n\n\n\n\n...

@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 66.66667% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.90%. Comparing base (40d286c) to head (8cfd1f0).
⚠️ Report is 9 commits behind head on main.

Files with missing lines Patch % Lines
server/service/schedule/schedule.go 66.66% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #48502      +/-   ##
==========================================
+ Coverage   67.40%   67.90%   +0.50%     
==========================================
  Files        3677     3677              
  Lines      233664   233670       +6     
  Branches    12447    12447              
==========================================
+ Hits       157492   158678    +1186     
+ Misses      62057    60724    -1333     
- Partials    14115    14268     +153     
Flag Coverage Δ
backend 69.54% <66.66%> (+0.60%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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.

Cron jobs stuck in expired when a run is interrupted mid-flight

2 participants