Skip to content

ci(security): add Muninn security scan with fail-on info#7251

Open
sg0nzalez wants to merge 13 commits into
NVIDIA:mainfrom
sg0nzalez:ci/add-muninn-enforce
Open

ci(security): add Muninn security scan with fail-on info#7251
sg0nzalez wants to merge 13 commits into
NVIDIA:mainfrom
sg0nzalez:ci/add-muninn-enforce

Conversation

@sg0nzalez

@sg0nzalez sg0nzalez commented Jul 20, 2026

Copy link
Copy Markdown

Summary

Adds Muninn as a merge-gating security scan (fail-on: info) so PRs and main get unified CI/CD, secret, SAST, dependency, and IaC findings with SARIF upload and PR comments. Also hardens checkout credential persistence / action pins and bumps vulnerable transitive dependencies so the new gate can pass.

Changes

  • Add .github/workflows/muninn.yaml (pinned skaldlab/muninn@v0.3.5, SARIF + PR comment)
  • Add root muninn.yml with fail-on: info and justified suppressions for intentional PRT trust models, hash-pinned Actions creator noise, test-fixture fake secrets, and sandbox Docker/Checkov policy exceptions
  • Add .github/actionlint.yaml for NVIDIA self-hosted runner labels
  • Set persist-credentials: false on flagged checkout steps; pin actions/setup-node where it was unpinned
  • Override transitive axios to ^1.18.1 and refresh nested lockfile advisories
  • Ignore generated muninn.json / muninn.sarif

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification: CI workflow / config / dependency pin changes; verified with local muninn --fail-on info (exit 0)
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: internal CI security gate; no user-facing product behavior change
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: CI/security workflow + suppressions for documented PRT trust model; please review muninn.yml suppressions and PRT-related justifications
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: /tmp/muninn --target . --config muninn.yml --fail-on info → exit 0 (0 unsuppressed findings)
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: not applicable (CI config only)
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Test plan

  • Confirm Security / Muninn runs on this PR and uploads SARIF
  • Confirm the Muninn job fails the check only when unsuppressed findings are present (fail-on: info)
  • Review muninn.yml suppressions (especially PRT / untrusted-checkout justifications)
  • Spot-check checkout steps still have persist-credentials: false where expected

Signed-off-by: Santiago Gonzalez santiago.gonzalez33@gmail.com

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Added a Muninn security scanning workflow that runs on pull requests and other scheduled/manual triggers, and posts results while uploading SARIF when available.
  • Security

    • Improved CI security by disabling Git credential persistence after checkout across multiple workflows.
    • Tightened GitHub workflow permissions (including CodeQL/ShellCheck) to reduce access scope.
  • Chores

    • Pinned critical automation actions to fixed revisions, added Dependabot cooldowns, and updated CI Node.js installation/argument handling for more deterministic runs.

Introduce the Muninn GitHub Action as a merge-gating security check,
harden checkout credential persistence and action pins, bump vulnerable
transitive dependencies, and document justified suppressions for
intentional PRT trust models and test fixtures.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 20, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds Muninn security scanning configuration and workflow coverage, hardens GitHub Actions credentials and permissions, improves workflow value handling and Node.js installation, pins selected actions, and updates dependency and Dependabot settings.

Changes

CI security hardening

Layer / File(s) Summary
Scanner configuration and exceptions
.github/actionlint.yaml, muninn.yml
Defines Muninn scanners, runner labels, tool settings, and fingerprint- or ID-based suppressions.
Muninn workflow integration
.github/workflows/muninn.yaml, .gitignore
Adds PR, push, scheduled, and manual Muninn execution with trusted policy resolution, scoped permissions, SARIF upload, PR comments, and ignored generated outputs.
Workflow credential and permission hardening
.github/workflows/base-image.yaml, .github/workflows/code-scanning.yaml, .github/workflows/docs-*-pr.yaml, .github/workflows/pr-self-hosted.yaml, .github/workflows/*e2e*.yaml, .github/workflows/release-latest-tag.yaml
Disables checkout credential persistence, scopes write permissions to required jobs, and disables package-manager caching for the release workflow.
Workflow input and shell handling
.github/workflows/candidate-compatibility.yaml, .github/workflows/e2e.yaml, .github/workflows/macos-e2e.yaml, .github/workflows/pr-e2e-gate.yaml, .github/workflows/pr-review-advisor.yaml, .github/workflows/platform-vitest-main.yaml, .github/workflows/wsl-e2e.yaml
Moves workflow values into environment variables, quotes shell arguments, pins selected actions, and installs verified architecture-specific Node.js archives.
Dependency and update settings
package.json, .github/dependabot.yml, test/code-scanning-workflow.test.ts
Pins the axios override to ^1.18.1, adds a seven-day GitHub Actions update cooldown, and tests that cooldown setting.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant GitHubActions
  participant Checkout
  participant Muninn
  participant UploadSARIF
  GitHubActions->>Checkout: Checkout repository and trusted base policy
  Checkout->>Muninn: Provide resolved Muninn configuration
  Muninn->>GitHubActions: Produce comments and muninn.sarif
  GitHubActions->>UploadSARIF: Upload SARIF when present
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding the Muninn merge-gating security scan with fail-on-info behavior.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@wscurran wscurran added area: ci CI workflows, checks, release automation, or GitHub Actions area: security Security controls, permissions, secrets, or hardening chore Build, CI, dependency, or tooling maintenance labels Jul 20, 2026
@wscurran

Copy link
Copy Markdown
Contributor

✨ Thanks for the fix. This adds a merge-gating Muninn security scan with SARIF upload and PR comments, plus CI hardening. Ready for maintainer review.

@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

🧹 Nitpick comments (1)
muninn.yml (1)

5-5: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

fail-on: info is specified in two places — pick one source of truth.

The setting appears in both muninn.yml (config file) and .github/workflows/muninn.yaml (workflow input). If the action uses the workflow input as the override, the config value is dead; if someone changes one but not the other, behavior diverges. Choose one location and remove the other.

  • muninn.yml#L5-L5: Remove fail-on: info if the workflow input is the source of truth, or keep it and remove the workflow input.
  • .github/workflows/muninn.yaml#L41-L41: Remove fail-on: info from the workflow input if the config file is the source of truth, or keep it and remove the config file entry.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@muninn.yml` at line 5, Choose a single source of truth for the fail-on
setting and remove the duplicate declaration: update muninn.yml lines 5-5 and
.github/workflows/muninn.yaml lines 41-41 so only one retains fail-on: info,
with the other explicitly removed; preserve the resulting action behavior.
🤖 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 `@package.json`:
- Around line 94-96: Regenerate package-lock.json after adding the root axios
override in package.json, ensuring the lockfile records the updated axios
resolution policy and dependency tree. Commit the regenerated lockfile without
changing the override itself.

---

Nitpick comments:
In `@muninn.yml`:
- Line 5: Choose a single source of truth for the fail-on setting and remove the
duplicate declaration: update muninn.yml lines 5-5 and
.github/workflows/muninn.yaml lines 41-41 so only one retains fail-on: info,
with the other explicitly removed; preserve the resulting action behavior.
🪄 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: Enterprise

Run ID: a524ebf1-c53a-460d-8fa0-e15d4c82b48e

📥 Commits

Reviewing files that changed from the base of the PR and between 70d7d28 and 34e7559.

⛔ Files ignored due to path filters (2)
  • nemoclaw/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (15)
  • .github/actionlint.yaml
  • .github/workflows/base-image.yaml
  • .github/workflows/code-scanning.yaml
  • .github/workflows/commit-lint.yaml
  • .github/workflows/docker-pin-check.yaml
  • .github/workflows/docs-cli-parity-pr.yaml
  • .github/workflows/docs-links-pr.yaml
  • .github/workflows/e2e-branch-validation.yaml
  • .github/workflows/macos-e2e.yaml
  • .github/workflows/muninn.yaml
  • .github/workflows/pr-self-hosted.yaml
  • .github/workflows/wsl-e2e.yaml
  • .gitignore
  • muninn.yml
  • package.json

Comment thread package.json
@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / medium confidence
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions
Status: Canonical ledger: 0 blocker(s), 1 warning(s), 0 suggestion(s).

Model lanes

  • GPT-5.6 Terra (primary): Completed · medium confidence · 0 blockers · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 3 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 2 more warnings, the same number of suggestions.

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-onboard, credential-sanitization, security-posture

1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Test the trusted-base Muninn policy boundary

  • Location: .github/workflows/muninn.yaml:58
  • Category: security
  • Problem: PR runs select the base-SHA policy when it exists but fall back to the PR-head `muninn.yml` during bootstrap. The change contains no checked-in regression that proves head edits cannot disable scanners or expand suppressions once a base policy exists, or that the bootstrap exception is constrained as intended.
  • Impact: A future refactor of the policy-selection branch could let a pull request alter the scanner configuration evaluated by its write-capable security workflow, silently weakening security enforcement.
  • Recommendation: Add a focused checked-in workflow/helper test covering base-policy selection, rejection of head policy when a base policy exists, and the explicit bootstrap-only fallback.
  • Verification: Inspect `.github/workflows/muninn.yaml` lines 42-73 and repository tests for a fixture exercising both presence and absence of the base `muninn.yml`.
  • Test coverage: A test with distinct base and head `muninn.yml` fixtures that asserts the base file is selected when present, while the head file is selected only when the base fixture is absent.
  • Evidence: The pull-request workflow checks out `github.event.pull_request.base.sha` into `trusted-muninn-policy`. The resolver copies that policy when present but uses workspace `muninn.yml` in the alternate branch, with no test file added in the patch.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

sg0nzalez and others added 4 commits July 20, 2026 15:04
Keep the lockfile root dependencies aligned with package.json after moving
axios to an overrides-only pin via @j178/prek.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the redundant workflow fail-on input so severity gating is owned by
muninn.yml alone and cannot drift from the workflow.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Load muninn.yml from the PR base SHA so PRs cannot weaken suppressions,
fix template-injection / permissions / Node install checksum issues, and
drop suppressions that are no longer needed for fail-on: info.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Gate severity lives in muninn.yaml; root muninn.yml is scanners and
suppressions only. Base-SHA config checkout still protects the allowlist.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
muninn.yml (1)

51-64: 🔒 Security & Privacy | 🔴 Critical | ⚡ Quick win

Scope these suppressions to exact findings. muninn.yml#L51-L145

These selectors are broad and permanent: tool/rule-id can hide whole classes of findings, id matches by path substring, and empty expires makes each entry non-expiring. Replace them with finding fingerprints so only the reviewed false positives stay suppressed.

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

In `@muninn.yml` around lines 51 - 64, Replace the broad, non-expiring
suppressions throughout muninn.yml ranges 51-64, 67-72, 75-100, 103-128, and
130-143 with exact finding fingerprint selectors. Preserve suppressions only for
the reviewed false positives, remove broad tool/rule-id or path-substring
matching, and assign an explicit expiration to each retained suppression.
🧹 Nitpick comments (1)
.github/dependabot.yml (1)

10-11: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a regression assertion for the new cooldown.

The cooldown.default-days setting is valid for GitHub Actions version updates, but the existing test/code-scanning-workflow.test.ts contract does not verify it. Assert that this update entry retains default-days: 7 so future edits cannot silently remove or change the seven-day delay. GitHub notes that cooldown does not affect security updates. (docs.github.com)

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

In @.github/dependabot.yml around lines 10 - 11, Add a regression assertion in
the existing test/code-scanning-workflow.test.ts contract for the Dependabot
update configuration, verifying that cooldown.default-days remains exactly 7 for
GitHub Actions version updates; preserve the existing security-update behavior
and surrounding assertions.

Source: Coding guidelines

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

Inline comments:
In @.github/workflows/muninn.yaml:
- Around line 58-71: Update the config path emitted by the trusted-policy branch
in the workflow’s Muninn setup to be workspace-relative and accessible inside
Docker, rather than using RUNNER_TEMP or a host absolute path. Preserve the
existing copy and cleanup behavior, and ensure the config output points to the
copied trusted muninn.yml relative to the workspace so Muninn loads the intended
policy.

---

Outside diff comments:
In `@muninn.yml`:
- Around line 51-64: Replace the broad, non-expiring suppressions throughout
muninn.yml ranges 51-64, 67-72, 75-100, 103-128, and 130-143 with exact finding
fingerprint selectors. Preserve suppressions only for the reviewed false
positives, remove broad tool/rule-id or path-substring matching, and assign an
explicit expiration to each retained suppression.

---

Nitpick comments:
In @.github/dependabot.yml:
- Around line 10-11: Add a regression assertion in the existing
test/code-scanning-workflow.test.ts contract for the Dependabot update
configuration, verifying that cooldown.default-days remains exactly 7 for GitHub
Actions version updates; preserve the existing security-update behavior and
surrounding assertions.
🪄 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: Enterprise

Run ID: 31d72322-9cb5-4858-ad31-0f4d28f6972d

📥 Commits

Reviewing files that changed from the base of the PR and between d1636f1 and f870568.

📒 Files selected for processing (15)
  • .github/dependabot.yml
  • .github/workflows/candidate-compatibility.yaml
  • .github/workflows/code-scanning.yaml
  • .github/workflows/docs-links-pr.yaml
  • .github/workflows/e2e-branch-validation.yaml
  • .github/workflows/e2e.yaml
  • .github/workflows/macos-e2e.yaml
  • .github/workflows/muninn.yaml
  • .github/workflows/platform-vitest-main.yaml
  • .github/workflows/pr-e2e-gate.yaml
  • .github/workflows/pr-review-advisor.yaml
  • .github/workflows/regression-e2e.yaml
  • .github/workflows/release-latest-tag.yaml
  • .github/workflows/wsl-e2e.yaml
  • muninn.yml
🚧 Files skipped from review as they are similar to previous changes (3)
  • .github/workflows/docs-links-pr.yaml
  • .github/workflows/e2e-branch-validation.yaml
  • .github/workflows/code-scanning.yaml

Comment thread .github/workflows/muninn.yaml
sg0nzalez and others added 2 commits July 20, 2026 15:38
Use a workspace-relative trusted muninn.yml for the Docker action, replace
broad suppressions with fingerprints (path ids only where Semgrep lacks
stable fingerprints), and assert Dependabot Actions cooldown stays at 7 days.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@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: 2

🤖 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 `@muninn.yml`:
- Around line 230-244: Replace the path-scoped suppressions for
agents/hermes/Dockerfile, src/lib/onboard/created-sandbox-failure.test.ts, and
src/lib/resources-cmd.ts with finding-specific Semgrep fingerprints once stable
fingerprints are available, preserving only the intended current findings and
their expiration metadata.
- Around line 44-48: Update the Poutine suppression in muninn.yml for
github_action_from_unverified_creator_used to use the specific finding
fingerprint key, matching the structure of the other fingerprint-based
suppressions, instead of suppressing the entire rule globally. Preserve the
existing reason and expiration.
🪄 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: Enterprise

Run ID: ded98892-465f-40d4-b554-da783165adb9

📥 Commits

Reviewing files that changed from the base of the PR and between 2e151cc and 9d56c29.

📒 Files selected for processing (4)
  • .github/workflows/muninn.yaml
  • .gitignore
  • muninn.yml
  • test/code-scanning-workflow.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • .gitignore
  • .github/workflows/muninn.yaml

Comment thread muninn.yml Outdated
Comment thread muninn.yml Outdated
sg0nzalez and others added 5 commits July 20, 2026 16:05
Replace the global github_action_from_unverified_creator_used rule
suppression with per-finding fingerprints so new Actions uses still fail
the gate until explicitly reviewed.

Signed-off-by: Santiago Gonzalez <santiago.gonzalez33@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@dfernandez365-rgb dfernandez365-rgb 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.

Independent dependency review of exact head 6aee1dceb1d66c133608fbbdf8a5ad89490ed261: FAIL. The new scanner reports no unsuppressed findings, but the PR's own production dependency graph still contains a known high-severity advisory.

  1. HIGH — The production graph remains vulnerable. On the exact PR head:
npm audit --omit=dev --json

high: 1
brace-expansion 2.0.0 - 2.1.1
node_modules/filelist/node_modules/brace-expansion: 2.1.0
GHSA-3jxr-9vmj-r5cp
fixAvailable: true
exit: 1

The root brace-expansion was refreshed to 5.0.7, but the production filelist copy remains 2.1.0. Refresh that nested resolution to the maintained 2.x fix (2.1.2) and require npm audit --omit=dev to return zero before this security gate is described as passing.

  1. MEDIUM — The direct js-yaml declaration retains the vulnerable floor. package-lock.json resolves 4.3.0, but package.json still declares ^4.1.1. This weakens the dependency contract and permits regeneration or downstream no-lock installation from the vulnerable range implicated by GHSA-52cp-r559-cp3m/GHSA-h67p-54hq-rp68. Keep the v4-compatible line and raise the declared floor to ^4.3.0; no v5 migration is required.

A narrow two-file resolution (package.json plus package-lock.json) using js-yaml 4.3.0, root brace-expansion 5.0.7, and nested brace-expansion 2.1.2 produced zero production findings and passed 96 manifest/config tests, compatibility probes, CLI build, both typechecks, Biome, file-scoped hooks, and git diff --check. The shrinkwrapped 5.0.6 copy inside the development-only coding-agent package is separate debt and must not be “fixed” by a dishonest outer-lock edit.

This PR already owns the overlapping dependency refresh. Please repair it here rather than opening a duplicate dependency PR. The fact that Muninn is green while npm audit --omit=dev is high also deserves an explicit checked-in gate or documented coverage boundary; otherwise “unified dependency findings” overstates what this workflow proves.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: security Security controls, permissions, secrets, or hardening chore Build, CI, dependency, or tooling maintenance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants